【问题标题】:How to authenticate Salesforce through CData ODBC driver via OAuth's accessToken?如何通过 OAuth 的 accessToken 通过 CData ODBC 驱动程序对 Salesforce 进行身份验证?
【发布时间】:2020-03-05 11:55:04
【问题描述】:
我只能从用户名和密码中获取销售人员数据,如下所示。
cnxn = pyodbc.connect("DRIVER={CData ODBC Driver for Salesforce};User=myUser;Password=myPassword;Security Token=myToken;")
但是如果我不想在那里提供用户名和密码,并且想使用从 Oauth 返回的 Accesstoken 访问数据。我该怎么做?
【问题讨论】:
标签:
api
oauth-2.0
salesforce
pyodbc
cdata-drivers
【解决方案1】:
使用 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。
通过网络应用程序连接时,或者如果驱动程序无权打开浏览器窗口,您需要交换访问令牌的临时验证值:
- 调用 GetOAuthAuthorizationUrl。存储过程将 URL 返回到 OAuth 端点。
- 登录并授权应用程序。您将被重定向回回调 URL。如果您将 GrantType 参数设置为 Implicit,则回调 URL 在查询字符串参数中包含 OAuthAccessToken 和 OAuthServerUrl。如果将 GrantType 参数设置为 code,则回调 URL 包含名为“code”的查询字符串参数中的验证程序代码。提取验证码并调用 GetOAuthAccessToken。
相关部分:
要连接到数据,请设置以下连接属性:
- OAuthAccessToken
- OAuthServerUrl
要在访问令牌过期时自动刷新,请将 InitiateOAuth 设置为 REFRESH 并设置 OAuthRefreshToken。或者,在访问令牌过期时调用 RefreshOAuthAccessToken 存储过程。给定一个刷新令牌作为输入,该过程返回一个有效的 OAuth 访问令牌。
作为检索授权 URL 并让用户登录 Salesforce 的替代方法,您可以通过调用 GetOAuthAccessToken 设置密码授予类型,将 GrantType 设置为 PASSWORD。在这里,除了应用程序的客户端 ID 和密码之外,您还需要确保在连接字符串中设置了用户名和密码。请注意,必须将 InitiateOAuth 设置为 OFF 才能使密码授予类型起作用。您无法刷新以这种方式获得的令牌。此方法的优点是为无法打开 Web 浏览器的用户删除了登录步骤,但缺点是用户的凭据在服务器和 Salesforce 之间以纯文本形式交换。
注意:您可以在 Salesforce 中配置会话超时,方法是导航到设置 > 管理设置 > 安全控制 > 会话设置。