适用于更新会话的 OAuth 2.0 刷新标记流
OAuth 2.0 刷新标记流更新由 OAuth 2.0 Web 服务器流或 OAuth 2.0 用户代理流发布的访问标记。
所需的 Edition
| 适用于:Salesforce Classic(并非在所有组织中可用)和 Lightning Experience |
| 适用于:所有版本 |
客户端通过连接的应用程序收到访问标记后,可以使用刷新标记在当前会话到期时获取新会话。连接的应用程序的会话超时值决定了访问标记何时不再有效,以及何时使用刷新标记申请新标记。
为了提高安全性,当您配置 OAuth 设置时,请在连接的应用程序或外部客户端应用程序上启用刷新令牌轮换。启用此设置后,每次调用流时,连接的应用程序都会发出新的刷新令牌和访问令牌。之前的刷新令牌会自动失效。刷新令牌轮换确保每个刷新令牌对每个用户仅使用一次,因此刷新令牌不能用于获取新的访问令牌。如果有人试图使用已轮换的刷新令牌,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 请求格式,包括以下参数。
| 参数 | 描述 |
|---|---|
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
|
使用
|
format
|
如果没有包含在请求的标题中,您可以指定预期的返回格式。
|
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) 的访问令牌,您的响应将包含此参数,以指示访问令牌的格式。该值为 如果您的应用程序发布不透明的访问令牌,则不包括此参数。 |
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。 |

