这是一个非常核心且实用的概念,尤其在理解 OAuth 2.0、OpenID Connect 等现代认证授权协议时必不可少。
服务器刷新令牌(Refresh Token)是一个特殊的、长期有效的凭证,用于在用户的访问令牌(Access Token)过期后,无需用户重新输入密码,就能自动获取一个新的访问令牌。
下面我们从几个方面来详细拆解它。
想象一下,你有一张游乐园的“快速通行证”,但它的有效期只有2小时,如果你玩一整天,每2小时就要去售票处排队、验证身份、重新领一张新通行证,非常麻烦。
在互联网世界里,访问令牌(Access Token) 就像是这张“快速通行证”,它用来证明你有权限访问某个资源(比如你的相册、邮件),为了保证安全,访问令牌的生命周期通常很短(比如15分钟到1小时),因为如果这个令牌被盗,攻击者只有很短的时间窗口可以使用它。
但问题来了:如果访问令牌每15分钟就过期,用户不得不在手机上频繁地输入密码去获取新令牌,这体验极差。
解决方案就是引入“刷新令牌”。
访问令牌(Access Token):短期有效,用于访问具体资源。
刷新令牌(Refresh Token):长期有效(比如几天、几周甚至几个月),仅用于获取新的访问令牌。
这就是“服务器刷新令牌”发挥作用的地方,流程如下:
1、用户首次登录:用户输入用户名和密码,向授权服务器(服务器端)请求访问权限。
2、服务器颁发双令牌:服务器验证通过后,会返回两个令牌给客户端(你的手机App或网页浏览器):
- 一个访问令牌(Access Token),比如有效期15分钟。
- 一个刷新令牌(Refresh Token),比如有效期30天。
3、客户端使用访问令牌:客户端带着访问令牌去请求各种API(获取我的照片”),只要令牌没过期,一切顺利。
4、访问令牌过期:客户端再次请求API时,服务器返回一个“401 Unauthorized”错误,提示令牌已失效。
5、客户端使用刷新令牌:客户端不去打扰用户,而是默默地将刷新令牌发送到授权服务器的特定接口(而非普通API)。
6、服务器验证并颁发新令牌:授权服务器验证刷新令牌是否有效(是否过期、是否被撤销等),如果有效,服务器就会:
- 颁发一个新的访问令牌(重新计算15分钟有效期)。
- (可选)颁发一个新的刷新令牌(有些协议支持“令牌轮换”)。
7、客户端继续正常请求:客户端用新的访问令牌成功获取了照片,用户完全无感知。
3. 访问令牌 vs. 刷新令牌:关键区别
| 特性 | 访问令牌 (Access Token) | 刷新令牌 (Refresh Token) |
| 用途 | 用于访问具体的资源(读相册、发邮件等)。 | 仅用于从授权服务器获取新的访问令牌。 |
| 有效期 | 短(分钟级到小时级)。 | 长(天级、周级、月级)。 |
| 范围 | 通常包含了具体的权限范围(Scope),如read_photos。 | 通常权限范围很大,甚至与原始授权相同。 |
| 存储 | 客户端需要安全地存储,暴露风险相对低(因为很快过期)。 | 客户端必须以最高安全级别存储(HTTP Only Cookie,安全存储区),因为它相当于用户的长期“钥匙”。 |
| 交互对象 | 与资源服务器(存储照片、文件的服务器)交互。 | 仅与授权服务器(负责颁发令牌的中央服务器)交互。 |
| 被撤销 | 很难被动撤销,只能等其自然过期。 | 可以被服务器主动撤销(用户修改密码、设备被标记为可疑)。 |
这个术语的重点在于“服务器”,它强调了以下几点:
它不是客户端生成的:刷新令牌必须由授权服务器(你信任的后端服务)安全地生成、签名和颁发。
验证在服务器端:客户端只能拿着刷新令牌去问服务器“我能换一个新的吗?”,而不能自行计算或生成新的令牌,验证逻辑完全掌握在可信的服务器手中。
安全性依赖于服务器:刷新令牌的安全模型强烈依赖于服务器的正确实现(存储、验证、撤销机制),如果服务器端泄露了刷新令牌,攻击者就可以长期伪装成用户。
尽管强大,刷新令牌也带来了风险:
单点失效:如果刷新令牌被盗,相当于用户的长期访问权限被盗。
无限访问:如果不对刷新令牌设置有效期或撤销机制,理论上可以永久使用。
最佳实践:
使用HTTPS:所有令牌传输必须加密。
刷新令牌轮换:每次使用刷新令牌换取新访问令牌时,服务器也颁发一个新的刷新令牌,并让旧的失效,这样即使刷新令牌被盗,只要被使用一次,后续的新令牌就会让旧令牌无效。
限制刷新令牌的有效期:即使长期有效,也应设置一个合理上限(如30天、90天)。
服务器端撤销能力:允许用户在“账户设置”中撤销所有已登录设备上的刷新令牌(当用户修改密码或检测到可疑活动时)。
安全存储:客户端(尤其是移动App或浏览器)必须使用安全的本地存储机制(如iOS Keychain, Android Keystore, HttpOnly + Secure Cookies)来保存刷新令牌。
服务器刷新令牌是一种由授权服务器颁发的、长期有效的凭证,它的唯一使命是在访问令牌过期后,无需用户重新登录,就能安全、自动地换取新的短期访问令牌,它极大地提升了用户体验,同时通过分离短期凭证(访问令牌)和长期凭证(刷新令牌)来平衡安全性和便利性。
文章摘自:https://idc.huochengrm.cn/js/25994.html
评论