Loading
识别您的用户并管理访问
适用于更新会话的 OAuth 2.0 刷新标记流

适用于更新会话的 OAuth 2.0 刷新标记流

OAuth 2.0 刷新标记流更新由 OAuth 2.0 Web 服务器流或 OAuth 2.0 用户代理流发布的访问标记。

所需的 Edition

适用于:Salesforce Classic(并非在所有组织中可用)和 Lightning Experience
适用于:所有版本
备注
备注 自 Spring ‘26 起,连接的应用程序创建受到限制。在 Spring ‘26 期间和之后,您可以继续使用现有的连接的应用程序。但我们建议使用外部客户端应用程序。如果您必须继续创建连接的应用程序,请联系 Salesforce 支持。

有关更多详细信息,请查看无法在 Spring ‘26 中创建新连接应用程序。

客户端通过连接的应用程序收到访问标记后,可以使用刷新标记在当前会话到期时获取新会话。连接的应用程序的会话超时值决定了访问标记何时不再有效,以及何时使用刷新标记申请新标记。

为了提高安全性,当您配置 OAuth 设置时,请在连接的应用程序或外部客户端应用程序上启用刷新令牌轮换。启用此设置后,每次调用流时,连接的应用程序都会发出新的刷新令牌和访问令牌。之前的刷新令牌会自动失效。刷新令牌轮换确保每个刷新令牌对每个用户仅使用一次,因此刷新令牌不能用于获取新的访问令牌。如果有人试图使用已轮换的刷新令牌,Salesforce 会使当前刷新令牌和任何关联的访问令牌无效。为了获得新的刷新令牌,客户端必须完成新的流。

刷新令牌流包括以下步骤。

  1. 连接的应用程序使用现有刷先标记请求新的访问标记。
  2. 验证请求后,Salesforce 向客户端授予新的访问标记。

请求更新后的访问标记

通过向 Salesforce 标记端点发送以下刷新标记 POST 请求之一,连接的应用程序可以使用刷新标记获取新的访问标记。

连接的应用程序可以在刷新标记 POST 请求的正文中发送client_id和client_secret,如下所示。

POST /services/oauth2/token HTTP/1.1
Host: login.salesforce.com/ 
grant_type=refresh_token&
client_id=3MVG9lKcPoNINVBIPJjdw1J9LLM82HnFVVX19KY1uA5mu0QqEWhqKpoW3svG3XHrXDiCQjK1mdgAvhCscA9GE&client_secret=1955279925675241571&
refresh_token=your token here 

您可以使用 HTTP 基础身份验证方案,而不是将客户端凭据作为刷新标记 POST 请求正文中的参数发送。此方案的格式需要在帖子的授权标题中进行如下client_id和client_secret:

Authorization: Basic64Encode(client_id:secret)

client_id 和 client_secret 使用冒号 (:) 分隔。有关更多信息,请查看 OAuth 2.0 授权框架。

此示例显示使用 HTTPS 基础身份验证方案的刷新令牌 POST 请求(而不是在 POST 请求正文中发送的客户端凭据)。

POST /services/oauth2/token HTTP/1.1
Host: login.salesforce.com
Authorization:  Basic 
client_id=3MVG9lKcPoNINVBIPJjdw1J9LLM82HnFVVX19KY1uA5mu0QqEWhqKpoW3svG3XHrXDiCQjK1mdgAvhCscA9GE&
client_secret=1955279925675241571
grant_type=refresh_token&
refresh_token=your token here 
备注
备注 如果client_id和client_secret在 POST 的正文中发送,授权标题将被忽略。

避免同时发送包含相同刷新标记的请求。如果您的客户端同时发送相同的请求,一些请求会间歇性失败,登录历史记录中的状态列显示“已失败”:令牌请求已在处理中。不要连续发送新访问令牌的请求,而是缓存和重用令牌。如果您使用相同的刷新标记发送同时请求,但不建议这样做,请开发一种在发生此错误时重试请求的方法。

使用刷新标记 POST 请求格式,包括以下参数。

重要
重要 在开发 OAuth 集成时,请始终在 POST 请求的正文或请求标题中传递敏感信息。不要在 URL 查询字符串中使用 GET 参数来传递敏感信息。敏感信息包括但不限于用户名、密码、OAuth 令牌、客户端密码和任何个人身份信息。有关安全最佳实践的更多信息,请查看安全编码指南中的存储敏感数据。
参数 描述
client_id 连接的应用程序的使用者密钥。要访问消费者密钥,请从应用程序管理器中找到连接的应用程序,并从下拉列表中选择查看。然后,单击管理客户详细信息。在查看消费者密钥之前,有时会提示您验证您的身份。
client_secret 连接的应用程序的使用者密码。要访问使用者密码,请从应用程序管理器中找到连接的应用程序,并从下拉列表中选择查看。然后,单击管理客户详细信息。在查看使用者密码之前,有时会提示您验证您的身份。
grant_type 连接的应用程序请求的 OAuth 2.0 授权类型。对于此流,值必须是 refresh_token。
refresh_token 从 Web 服务器、用户代理或混合应用程序标记流中获取的标记。该值是密钥。采取适当措施保护它。仅当您连接的应用程序设置了refresh_token范围时,才会返回此参数。
client_assertion 您可以提供client_assertion和client_assertion_type,而不是传递client_secret。如果未提供 client_secret 参数,Salesforce 会检查client_assertion和client_assertion_type。请参阅使用client_assertion而不是client_secret。
client_assertion_type

使用 client_assertion 参数时提供此值。

client_assertion_type 的值必须是 urn:ietf:params:oauth:client-assertion-type:jwt-bearer。

format

如果没有包含在请求的标题中,您可以指定预期的返回格式。format 参数优先于请求的标题。支持这些格式。

  • urlencoded
  • json(默认)
  • xml

Salesforce 授予新的访问标记

验证请求后,Salesforce 会向连接的应用程序发送带有新访问标记的响应。

以下是 Salesforce 的 JSON 响应示例。

{ 
"id":"https://login.salesforce.com/id/00Dx0000000BV7z/005x00000012Q9P",
"issued_at":"1278448384422",
"instance_url":"https://yourInstance.salesforce.com/",
"signature":"SSSbLO/gBhmmyNUvN18ODBDFYHzakxOMgqYtu+hDPsc=",
"access_token":"00Dx0000000BV7z!AR8AQP0jITN80ESEsj5EbaZTFG0RNBaT1cyWk7TrqoDjoNIWQ2ME_sTZzBjfmOE6zMHq6y8PIW4eWze9JksNEkWUl.Cju7m4",
"token_type":"Bearer",
"scope":"id api refresh_token"
}

以下是 XML 响应示例。

<Oauth>
   <access_token>00Dx0000000BV7z!AR8AQP0jITN80ESEsj5EbaZTFG0RNB
       aT1cyWk7TrqoDjoNIWQ2ME_sTZzBjfmOE6zMHq6y8PIW4eWze9JksNEkWUl.Cju7m4 
   </access_token>
   <token_type>Bearer
   </token_type>
   <scope>id api refresh_token
   </scope>
   <instance_url>https://yourInstance.salesforce.com/</instance_url>
   <id>https://login.salesforce.com/id/00Dx0000000BV7z/005x00000012Q9P</id>
   <issued_at>1278448101416</issued_at>
   <signature>CMJ4l+CCaPQiKjoOEwEig9H4wqhpuLSk4J2urAe+fVg=</signature>
</Oauth>

此示例显示了 URL 编码的响应。

access_token=00Dx0000000BV7z%21AR8AQP0jITN80ESEsj5EbaZTFG0RNBaT1cyWk7TrqoDjoNIWQ2
ME_sTZzBjfmOE6zMHq6y8PIW4eWze9JksNEkWUl.Cju7m4
&token_type=Bearer&scope=id%20api%20refresh_token
&instance_url=https%3A%2F%2FyourInstance.salesforce.com
&id=https://login.salesforce.com%2Fid%2F00Dx0000000BV7z%2F005x00000012Q9P
&issued_at=1278448101416
&signature=CMJ4l%2BCCaPQiKjoOEwEig9H4wqhpuLSk4J2urAe%2BfVg%3D

如果为连接的应用程序或外部客户端应用程序启用了刷新标记轮换,响应将包括新的刷新标记。以下是启用刷新令牌轮换时的 JSON 响应示例。

{ 
"access_token":"00Dx0000000BV7z!AR8AQP0jITN80ESEsj5EbaZTFG0RNBaT1cyWk7T...",
"refresh_token":"CjAwRHgwMDAwMDAwQlY3eiFBUjhBUVAwaklUTjgwRVNFc2o1RWJhWl...",
"signature":"SSSbLO/gBhmmyNUvN18ODBDFYHzakxOMgqYtu+hDPsc=",
"scope":"id api refresh_token",
"instance_url":"https://yourInstance.salesforce.com/",
"id":"https://login.salesforce.com/id/00Dx0000000BV7z/005x00000012Q9P"
"token_type":"Bearer",
"issued_at":"1278448384422",
}

响应正文中可以包含以下参数。

参数 描述
access_token 连接的应用程序用来代表客户端应用程序请求访问受保护资源的 OAuth 标记。访问标记可以附带范围形式的附加权限。
refresh_token 新的刷新标记。下次调用刷新标记流时,使用刷新标记获取新的访问标记。仅当您为连接的应用程序或外部客户端应用程序启用刷新标记轮换时,才会包含此参数。
token_type Bearer标记类型,用于包含访问标记的所有响应。
token_format

如果连接的应用程序或外部客户端应用程序能够颁发基于 JSON Web 令牌 (JWT) 的访问令牌,您的响应将包含此参数,以指示访问令牌的格式。该值为 jwt。

如果您的应用程序发布不透明的访问令牌,则不包括此参数。

instance_url 指示用户的组织实例的 URL。例如:https://yourInstance.salesforce.com/.
id 可用于标识用户以及查询有关用户的更多信息的身份 URL。请参阅身份 URL。
issued_at 签名创建时间的时间戳,单位毫秒。
signature 使用 client_secret 签名的 Base64 编码 HMAC-SHA256 签名。签名可以包括连接 ID 和issued_at value,您可以使用它们来验证身份 URL 在服务器发送后没有更改。
sfdc_site_url 如果用户是 Experience Cloud 站点的成员,则提供站点 URL。
sfdc_site_id 如果用户是 Experience Cloud 站点的成员,则提供用户的站点 ID。
 
正在加载
Salesforce Help | Article