Access Token 和 Refresh Token 的工作原理
发布: (2026年3月1日 GMT+8 03:46)
4 分钟阅读
原文: Dev.to
Source: Dev.to

简单登录流程

- 你请求 “使用 Google 登录”。
- 应用重定向到 授权服务器(Google),该服务器对你进行身份验证并返回一个 授权码。
- 应用使用该代码换取 访问令牌(以及 刷新令牌)。
- 应用使用访问令牌代表你调用 资源服务器。
授权服务器负责 你是谁;资源服务器负责 你可以做什么。
访问令牌
把访问令牌想象成每日通行证。每一次对资源服务器的请求都要携带此令牌,服务器在响应前会对其进行验证。
- 短期有效 – 通常是几分钟到几小时。
- 频繁暴露 – 几乎随每个请求一起传输,短生命周期可以限制被拦截后的危害。
如果访问令牌的有效期很长,将会是安全噩梦,因为攻击者可以在较长时间内使用它。
刷新令牌
当访问令牌过期时,应用会悄悄使用 刷新令牌 向授权服务器获取新的访问令牌——无需用户交互。
- 长期有效 – 天、周,甚至月。
- 很少传输 – 只发送给授权服务器,绝不发送给资源服务器。
- 用途专一 – 仅用于获取新的访问令牌。
这种分离让刷新令牌更安全,并且在需要时更容易撤销。
快速对比

| 方面 | 访问令牌 | 刷新令牌 |
|---|---|---|
| 有效期 | 分钟到小时 | 天到月 |
| 暴露程度 | 随每个 API 请求一起发送 | 仅发送给授权服务器 |
| 用途 | 授权资源访问 | 获取新的访问令牌 |
| 撤销方式 | 通常短期有效,影响较小 | 可在中心位置撤销 |
为什么不使用单一令牌?
如果使用一个长期有效的单一令牌并在每次请求中发送,它将是 安全灾难。一旦被窃取,攻击者就能在很长时间内拥有不受限制的访问权限。将职责拆分:
- 访问令牌 – 短期有效,降低暴露风险。
- 刷新令牌 – 长期有效,暴露少,易于撤销。