【问题标题】:Get refresh_token for Connected App in SalesForce在 SalesForce 中获取 Connected App 的 refresh_token
【发布时间】:2020-11-26 15:10:22
【问题描述】:

我设置了一个 Connected App,这是一个 Python 应用程序,用于代表用户以编程方式访问 Salesforce 对象(离线访问)。

该应用程序有效,我可以生成一个access_token

$ curl https://login.salesforce.com/services/oauth2/token -d "grant_type=password" -d "client_id=MY_APP_CLIENT_ID" -d "client_secret=MY_APP_SECRET" -d "username=my@user.com" -d "password=my_password"

{"access_token":"00D09000000KDIX!AQoAQNi1234","instance_url":"https://my_instance.salesforce.com","id":"https://login.salesforce.com/id/12345/12345","token_type":"Bearer","issued_at":"1606401330889","signature":"abc/def"}

到目前为止一切顺利。

现在我想切换到使用刷新令牌的基于 Web 服务器的流程,但我被难住了。我在哪里可以得到最初的refresh_tokengrant_type=refresh_token 一起发送?文档似乎假设我已经有一个 refresh_token 并且只想基于此生成另一个 access_token,但事实并非如此。

端到端的实际步骤和必要的调用是什么?

我找到并阅读的文档列表,但让我没有更聪明:

【问题讨论】:

  • 您要实施哪个 OAuth 流程?听起来您可能需要 Web ServerUser Agent 流,但如果您正在构建无头离线应用程序,则可能需要 JWT
  • @DavidReed JWT,最终。但现在:Now I wanted to switch to a web-server-based flow that uses refresh tokens.

标签: salesforce salesforce-lightning


【解决方案1】:

这是关于 Web Server OAuth 流程的 Salesforce 文档。它是这样运行的;请注意,其中涉及用户交互,因此 curl 本身不足以清楚地展示流程。

  • 您将用户引导至 Salesforce 登录 UI,在他们的 Web 浏览器中,为自己获取一个授权代码:

    https://login.salesforce.com/services/oauth2/authorize?client_id=<YOUR CONNECTED APP CLIENT ID>&redirect_uri=<CALLBACK URL ON YOUR SERVER>&response_type=code
    
  • 用户与授权页面交互以批准您的申请。

  • 然后用户将被重定向到您在调用中提供的应用程序中的回调 URL(注意:这也必须在您的 Connected App 定义中设置为回调),例如,

    https://YOUR_SERVER.com/oauth2/callback?code=<AUTHORIZATION CODE>
    

    如果您愿意,您的应用可以在此处显示 UI,但重点是获取授权代码。

    回调 URL 可以在本地主机上。例如,Salesforce CLI 就是这样实现组织授权的;它启动本地 Web 服务器以接收回调。

  • 至此,用户交互完成。您的应用程序向 Salesforce 的 /services/oauth2/token 端点发出 POST 请求,以交换您收到的授权代码以获取访问令牌。

    如果您的 Connected App 设置为 refresh_token 范围,您还将在那时取回一个刷新令牌,您可以使用刷新令牌流存储并使用它来获取新的访问令牌已经确定了。

对于无头应用程序,直接使用 JWT 会更容易(如果这是您的最终目标)。我有一个 example 如何将 JWT 身份验证与 simple_salesforce Python 库配对。在连接的应用程序上填充证书并分配预先批准的配置文件(或更好的权限集)需要一些初始设置,但一旦设置完成,它就非常顺利,不需要任何用户交互。

【讨论】:

  • 我很高兴我问了!很棒的答案,包括最后一段。谢谢。
  • 有效。对于任何想知道的人:instance_urlrefresh_token 一起在第 4 点的 JSON 响应中返回。
猜你喜欢
  • 2017-08-29
  • 1970-01-01
  • 2011-06-27
  • 1970-01-01
  • 2018-08-16
  • 2017-07-25
  • 2015-05-26
  • 1970-01-01
  • 2018-08-01
相关资源
最近更新 更多