OAuth2刷新令牌实际包含内容及获取新访问令牌流程问询
什么是Refresh Token?
- 它是OAuth2体系里的长期凭证,和Access Token的核心差异在于定位和生命周期:
- Access Token是访问资源服务器的直接凭证,生命周期通常很短(15分钟到1小时),目的是降低凭证泄露后的风险范围
- Refresh Token生命周期长得多(几天到数月不等),唯一作用就是向授权服务器申请新的Access Token,绝对不能直接用来访问资源
- 存储要求更严格:由于有效期长,泄露后危害更大,客户端必须将其存在安全位置——比如后端服务的加密数据库、移动端的安全存储容器,绝不能放在前端LocalStorage这类易被XSS攻击的地方
用Refresh Token获取新Access Token的流程
当Access Token过期后,客户端按以下步骤操作即可:
- 构造请求:向授权服务器的
token端点发送POST请求,携带必填参数:grant_type:固定为refresh_token(明确告知授权服务器要走Refresh Token换凭证的流程)refresh_token:之前获取到的有效Refresh Token- 可选参数(取决于授权服务器配置):
client_id、client_secret(保密客户端如后端服务必须传,公开客户端如SPA一般不传)、scope(新Access Token的权限范围,不能超过原授权范围)
- 授权服务器验证:
- 检查Refresh Token是否有效(是否存在、未过期、未被用户主动吊销)
- 验证客户端身份(若配置了客户端校验)
- 确认请求的
scope未超出原授权的权限边界
- 返回新凭证:验证通过后,授权服务器会返回新的Access Token,通常还会附带一个新的Refresh Token(推荐用新的,进一步提升安全性);若验证失败,会返回对应错误码(比如
invalid_grant,表示Refresh Token无效) - 客户端更新凭证:用新的Access Token替换旧的,存储新的Refresh Token(若返回),之后即可继续用新Access Token访问资源服务器
实验时的常见注意点
- 并非所有OAuth2模式都支持Refresh Token:授权码模式完全支持,而隐式模式通常不支持(因为隐式模式面向前端应用,无法安全存储Refresh Token)
- Refresh Token也会失效:比如过期、被用户吊销、授权服务器检测到异常使用(如异地登录),此时客户端必须引导用户重新走授权流程,获取新的Access Token和Refresh Token
- 区分保密/公开客户端:后端服务这类保密客户端可以安全存储
client_secret和Refresh Token;SPA、移动端这类公开客户端要避免存储敏感信息,部分授权服务器会对公开客户端的Refresh Token做特殊限制
内容的提问来源于stack exchange,提问作者kupendra pola
相关产品推荐
相关产品推荐

