一文搞懂Token
背景
系统学习 Token 的背景、作用、使用时机、再生成时机,并结合生产系统案例说明其机制。
一、什么是 Token?
Token(令牌)是一种身份验证和授权机制中用于识别用户身份的信息片段,常用于用户登录认证之后,服务端颁发给客户端的字符串。它的主要作用是:代表用户身份,替代传统的 Session。
二、为什么需要 Token?
传统的登录系统依赖 Session + Cookie,在单体应用中问题不大,但在分布式架构、移动端、多端共享、微服务中就出现诸多痛点:
问题 | 描述 |
---|---|
Session 状态依赖服务器内存 | 不利于横向扩展 |
多端共享难 | App、Web、小程序等无法共享浏览器 Cookie |
微服务架构下需要跨服务认证 | Session 很难传递 |
Token 的优势:
- 无状态(Stateless):服务端不存储用户状态,Token 自包含。
- 易扩展:适用于分布式、微服务、移动端等系统。
- 安全传输:Token 可设置过期时间、防篡改机制等。
三、常见的 Token 实现方式
1. JWT(JSON Web Token)
JWT 是最常见的 Token 格式,结构如下:
xxxxx.yyyyy.zzzzz
由三部分组成:
- Header:声明签名算法,如 HMAC、RSA
- Payload:用户信息(如
sub=用户名
、exp=过期时间
) - Signature:签名,防止篡改
举个例子:
经过签名后生成一串字符串,在前后端之间传递。
四、Token 在生产系统中的应用场景
场景一:用户登录(淘宝、微信、知乎等)
用户输入账号密码,后端验证成功后返回 JWT Token,浏览器/App 保存。
特点:
- 请求头中带上
Authorization: Bearer <token>
- 无需服务端维护状态
- 支持多端共享(Web、App)
场景二:API 网关 + 微服务认证
API Gateway 会校验 Token 是否有效,识别用户身份,再把请求转发到微服务。
例如:
- 用户访问
/user/info
,Token 中识别为 userId=1001 - 网关将 userId 注入到请求上下文中
五、什么时候生成 Token?
- 用户登录成功后
- 用户注册成功后(自动登录)
- 使用验证码/第三方认证成功后(微信、GitHub 授权)
六、什么时候需要重新生成 Token?
-
Token 即将过期或已过期
- 一般 Token 有效期为 30 分钟~2 小时
- 配合 Refresh Token 策略延长登录态
-
用户修改敏感信息(如密码)
- 防止老 Token 被继续使用
-
用户手动退出登录,再次登录
七、进阶机制:Refresh Token
为避免用户频繁登录,系统通常设计 双 Token 策略:
类型 | 用途 | 存储位置 | 有效期 |
---|---|---|---|
Access Token | 每次请求都使用 | 客户端内存/本地存储 | 短(30min) |
Refresh Token | 用来刷新 Access Token | HttpOnly Cookie | 长(7天或更长) |
示例流程:
- 用户登录,返回 Access Token(5~30 分钟) + Refresh Token(7 天)
- Access Token 过期,客户端自动调用
/auth/refresh
把 Refresh Token 发给服务端 - 服务端校验 Refresh Token,合法、没过期 → 签发新的 Access Token(甚至新的 Refresh Token)
示例接口设计:
八、真实系统参考
平台 | Token 使用场景 |
---|---|
GitHub API | OAuth2 认证后返回 access_token |
微信开放平台 | 登录换取 access_token + openid |
京东、淘宝 | 登录后服务端签发 JWT,前端保存 |
阿里云微服务架构 | 网关验证 Token,下游服务通过网关传递的用户信息进行处理 |
九、最佳实践总结
- Token 签发后建议短期有效,配合 Refresh Token 做自动续签
- Token 内不要存敏感信息(如密码),仅放 userId、权限等
- 使用 HTTPS 防止 Token 被窃取
- 支持服务端主动使 Token 失效(如加入黑名单 Redis)
十、结语
Token 并不是单一的解决方案,而是一套身份识别机制的核心组件,一种认证体系。理解它的使用背景、生命周期以及扩展策略,才能在复杂系统中设计出安全、稳定的认证体系。微服务系统,一般在 auth-service
中生成 JWT Token,在 gateway-service
中统一认证与校验,是生产系统设计的基础能力。
文章作者 会写代码的小郎中
上次更新 2025-07-27
许可协议 CC BY-NC-ND 4.0