什么是服务器刷新令牌?

这是一个非常核心且实用的概念,尤其在理解 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

评论