首页 > 解决方案 > 如何通过 OAuth 的 accessToken 通过 CData ODBC 驱动程序对 Salesforce 进行身份验证?

问题描述

我只能从用户名和密码中获取 salesforce 数据,如下所示。

cnxn = pyodbc.connect("DRIVER={CData ODBC Driver for Salesforce};User=myUser;Password=myPassword;Security Token=myToken;")

但是如果我不想在那里提供用户名和密码,并且想使用从 Oauth 返回的 Accesstoken 访问数据。我怎样才能做到这一点?

标签: apioauth-2.0salesforcepyodbccdata-drivers

解决方案


使用 OAuth 和 CData ODBC 驱动程序连接到 Salesforce 的说明如下:http: //cdn.cdata.com/help/RFE/odbc/pg_oauthcustomappcreate.htm(复制如下)。

简而言之,您将使用 OAuth 访问令牌和 OAuth 服务器 URL,您的代码将类似于以下内容

cnxn = pyodbc.connect("DRIVER={CData ODBC Driver for Salesforce};OAuthAccessToken=OAUTH_ACCESS_TOKEN;OAuthServerUrl=OAUTH_SERVER_URL;")

从 Web 应用程序向 Salesforce 进行身份验证

要获取访问令牌,请设置以下连接属性:

  • OAuthClientId:在您的应用设置中设置为使用者密钥。
  • OAuthClientSecret:在您的应用设置中设置为使用者密码。
  • CallbackURL:在您的应用设置中设置为回调 URL。

通过 Web 应用程序连接时,或者如果驱动程序无权打开浏览器窗口,您需要交换访问令牌的临时验证值:

  1. 调用 GetOAuthAuthorizationUrl。存储过程将 URL 返回到 OAuth 端点。
  2. 登录并授权应用程序。您将被重定向回回调 URL。如果将 GrantType 参数设置为 Implicit,则回调 URL在查询字符串参数中包含OAuthAccessTokenOAuthServerUrl 。如果将 GrantType 参数设置为 code,则回调 URL 包含名为“code”的查询字符串参数中的验证程序代码。提取验证者代码并调用 GetOAuthAccessToken。

相关部分:

要连接到数据,请设置以下连接属性:

  • OAuthAccessToken
  • OAuthServerUrl

要在访问令牌过期时自动刷新,请将InitiateOAuth设置为REFRESH并设置OAuthRefreshToken。或者,在访问令牌过期时调用 RefreshOAuthAccessToken 存储过程。给定一个刷新令牌作为输入,该过程返回一个有效的 OAuth 访问令牌。

作为检索授权 URL 并让用户登录 Salesforce 的替代方法,您可以通过调用 GetOAuthAccessToken 设置密码授予类型,将 GrantType 设置为 PASSWORD。在这里,除了应用程序的客户端 ID 和密码之外,您还需要确保在连接字符串中设置了用户名和密码。请注意,必须将 InitiateOAuth 设置为 OFF 才能使密码授予类型起作用。您无法刷新以这种方式获得的令牌。此方法的优点是为无法打开 Web 浏览器的用户删除了登录步骤,但缺点是用户的凭据在服务器和 Salesforce 之间以纯文本形式交换。

注意:您可以通过导航到设置 > 管理设置 > 安全控制 > 会话设置在 Salesforce 中配置会话超时。


推荐阅读