Python 启用单点登录时,如何访问Salesforce API?

Python 启用单点登录时,如何访问Salesforce API?,python,python-3.x,salesforce,okta,Python,Python 3.x,Salesforce,Okta,我试图使用Python Salesforce_API和简单的Salesforce模块对Salesforce API进行SOQL查询。我一直在用一个客户端对象发出这些请求: client = Salesforce(username='MY_USERNAME', password='MY_PASSWORD', security_token='MY_SALESFORCE_SECURITY_TOKEN') a = clien

我试图使用Python Salesforce_API和简单的Salesforce模块对Salesforce API进行SOQL查询。我一直在用一个客户端对象发出这些请求:

client = Salesforce(username='MY_USERNAME',
                    password='MY_PASSWORD',
                    security_token='MY_SALESFORCE_SECURITY_TOKEN')
a = client.query("SELECT something FROM some_object_table WHERE some_condition")
但是,我的公司最近限制Salesforce仅通过SSO登录(您过去可以在不使用SSO的情况下直接登录到Salesforce),该功能会引发以下任一情况:

simple\u salesforce.exceptions.salesforce身份验证失败:无效的\u SSO\u网关\u URL:组织的单一登录网关URL无效

或:

salesforce\u api.exceptions.AuthenticationMissingTokenError:提供的安全令牌缺失或无效。

取决于我使用的模块。我怀疑这是因为SSO实现


我看过关于通过Okta创建新应用的文档,但我需要验证和访问现有应用的API。在启用Okta IdP的情况下,访问此API的最佳方式是什么?有没有办法让get请求Okta为Salesforce返回访问令牌?

嗯。这是可行的,但却是一门艺术。我会试着写出来,但你应该看看“身份和访问管理”Salesforce认证、学习指南等。也可以尝试在Salesforce.stackexchange.com上询问,可能会得到更好的答案和Okta专家

我不知道是否有对Okta的纯服务器端访问,您将在其中提供,并且它将被静默地传递给登录

如果你的应用程序是一个需要人工操作的合适的web应用程序,你仍然可以让它与SSO一起工作。一般来说,您必须阅读OAuth2(您在web上看到它,所有的“使用Google/Facebook/LinkedIn/Twitter/…”按钮登录),然后实现类似或的功能。人类在你的应用程序中启动,被重定向到SF以输入用户名和密码(你看不到密码,你也不关心他是否遇到了正常的SF登录页面或某些SSO),成功后,他/她被重定向回,你收到的信息将让你获得会话id(有时称为访问令牌)。一旦您拥有了访问令牌,就可以进行查询等,只需将其作为HTPP授权承载头()传递即可

听着,我知道我写的东西没有多大意义。下载数据加载器并尝试使用它。您可能必须让它在登录时使用自定义域,但有一种方法可以让它继续工作,即使您强制了SSO。您的目标是构建类似于Data Loader的应用程序。这可能有点帮助:

如果您需要一个真正的后端集成,而不需要人工参与。。。棘手的不过,这可能是一个管理问题。他们不应该对每个人强制执行SSO。当Okta关闭时,您被锁定在组织之外,无法禁用SSO。您应该有一个备份计划,一些没有强制SSO的服务帐户。他们可能有疯狂的密码要求,可能只从office IP地址登录,不管怎样。对每个人实施SSO不是一个好主意

我们建议您不要为Salesforce管理员启用SSO。如果你的 Salesforce管理员是SSO用户,并且您的SSO服务器出现故障, 他们无法登录到Salesforce。确保销售人员 管理员可以登录到Salesforce,以便在必要时禁用SSO 出现问题


(如果您有一个web应用程序,并且它作为画布嵌入到SF中,那么有另一种干净的方法可以将会话id传递给您。同样,这只在您有人工集成而不是后端集成的情况下才有效)

这非常有帮助。后续:对于您链接到开拓者社区的两个项目,我是否需要为Okta或Salesforce创建(并获取客户id/客户机密)?我假设Salesforce是我正在尝试建立的实际应用程序连接。是的,在Salesforce中创建一个“连接的应用程序”,它将生成客户端id和密码。大话题。在应用程序中,您决定权限(比如,即使我是系统管理员,我也很少信任这个应用程序,只允许它访问我的聊天反馈,而不是删除所有数据)和回调URL。这将是sf管理员决定哪个应用程序可以实际收到成功登录结果的方式(因为可以在web上看到客户端id,但如果sf管理员不允许重定向到黑客的应用程序,黑客就不能在其应用程序中使用它)。如果你想将你的应用嵌入到SF中,你也可以在这里定义“画布应用”。这是一个非常酷的OpenId工作原理示例(这是OAuth2+获取当前用户信息的标准化方法)。点击它(你可以修改一些变量来使用沙盒和你的应用程序,一旦你生成了你的客户id+密码),在这个和SF数据加载器之间,你应该对你要构建的东西有很好的了解。或者对你的管理层大喊大叫;)