在 Salesforce 和外部系统集成时,为了实现登录态的持久化,常常需要用到 refresh_token,这是 OAuth 2.0 授权机制中的一部分。以下是简要介绍 refresh_token 接口的功能和作用:
- 初次授权与获取 Refresh Token:当用户首次通过 OAuth 2.0 协议授权登录时,Salesforce 会返回一个
access_token(用于访问资源的短期令牌)和一个refresh_token(用于刷新access_token的长期令牌)。 - Access Token 过期问题:
access_token是有时效性的,通常在一段时间后会过期。为了避免用户频繁地重新登录,refresh_token可以用于获取一个新的access_token。 - 使用 Refresh Token 刷新 Access Token:
- 当外部系统检测到当前的
access_token过期后,可以向 Salesforce 发送请求,携带refresh_token来获取新的access_token。 - 请求格式通常为一个 POST 请求,包含以下信息:
grant_type=refresh_tokenclient_id(应用的 Consumer Key)client_secret(应用的 Consumer Secret)refresh_token(之前获取的 Refresh Token)
- 当外部系统检测到当前的
- 持久化登录状态:通过定期使用
refresh_token来刷新access_token,外部系统可以保持与 Salesforce 的登录态,而无需用户再次手动登录。这大大提升了用户体验,尤其是在长时间会话或需要频繁调用 Salesforce API 的场景中。 - Refresh Token 的有效期:
refresh_token本身通常是长期有效的,但 Salesforce 也可能根据策略对其进行失效处理(例如,用户撤销授权或应用被删除)。
通过 refresh_token,外部系统可以在 access_token 过期后继续保持与 Salesforce 的会话,确保访问权限的持久性。

1. refresh_token不是业务接口用到的access_token
2. 使用password认证方式的access_token不能刷新
3. authorization_code认证方式可以拿到refresh_token,可参考上一篇
4. authorization_code认证方式response默认不会返回refresh_token,需要在参数scope加上offline_access
5. refresh_token接口可以实现登录态持久化的功能,具体实现为: 当业务接口判断access_token过期时,
自动调用refresh_token接口,获取新的access_token。
6. 在调用刷新接口时旧的refresh_token第一次获取了新的refresh_token和access_token,此时如果再次用这个
旧的refresh_token,进行第二次刷新会提示失败的同时,也会导致第一次获取的新的access_token也失效。
为避免这个问题,应避免多个线程同时使用同一个refresh_token调用刷新接口,可以考虑缓存和锁。保证
refresh_token唯一、一致。。


