企业认证与安全体系(一):为什么企业都在用双 Token 机制?一篇讲透 AccessToken、RefreshToken 与企业级认证体系
Android 开发其实非常常见。B 根本找不到 Session。Cookie 体系并不友好。双 Token 只是入口。彻底讲透企业级认证体系。这是很多大厂都会做的。保存 Session。服务器内存压力巨大。
大家平时在开发中,应该都见过:
Authorization: Bearer xxx
也经常听到:
- JWT
- AccessToken
- RefreshToken
- OAuth2
- Spring Security
但很多人其实并没有真正理解:
为什么企业一定要搞“双 Token”?
为什么:
- AccessToken 要短期有效?
- RefreshToken 还会过期?
- 为什么很多公司 RefreshToken 不用 JWT?
- 为什么 APP 会“突然掉登录”?
- 为什么有些系统支持“踢下线”?
这篇文章,我们从:
工程视角
彻底讲透企业级认证体系。
一、传统 Session 为什么不够用了
最早 Web 系统:
浏览器
↓
Cookie(JSESSIONID)
↓
Tomcat Session
服务端:
Map<sessionId, User>
保存用户登录状态。
这种模式:
Session 模式
Session 模式的问题
1. 服务端有状态
每个用户:
都需要:保存 Session
用户一多:
服务器内存压力巨大。
2. 集群麻烦
比如:
用户登录到:服务器A
Session 保存在:A机器
结果下一次请求:
负载均衡到了:服务器B
B 根本找不到 Session。
于是开始出现:
- Session 同步
- Redis Session
- Sticky Session(粘性会话)
架构开始变复杂。
3. APP / IoT 不适合
移动端:
- Android
- iOS
- IoT设备
- 小程序
并不是浏览器。
Cookie 体系并不友好。
于是:
Token 模式开始流行
二、Token 模式核心思想
核心理念:
服务端不保存登录状态
客户端 自己携带身份。
类似:身份证
登录成功后:
服务端:生成 Token
客户端:保存 Token
以后请求:
Authorization: Bearer accessToken
服务端:
校验 Token
三、为什么 AccessToken 要短期有效
因为:
Token 一旦泄露,非常危险
泄露来源:
- 抓包
- 日志泄露
- XSS
- 手机 Root
- 逆向
- 中间人攻击
黑客拿到:
AccessToken
就能直接调用接口。
所以:
AccessToken 生命周期必须短
例如:
| 系统 | AccessToken 有效期 |
|---|---|
| 银行系统 | 5~30分钟 |
| 电商系统 | 2小时 |
| 管理后台 | 1小时 |
| IoT设备 | 30分钟 |
四、为什么又需要 RefreshToken
如果:AccessToken = 30分钟
那么用户 每30分钟:重新登录 体验直接爆炸。
于是: 引入 RefreshToken
作用:自动刷新 AccessToken
用户:完全无感
五、双 Token 的真正本质
其实可以这样理解:
| Token | 本质 |
|---|---|
| AccessToken | 临时身份证 |
| RefreshToken | 长期续签资格 |
所以:
RefreshToken 权限更大
因为:
它可以不断生成新的:AccessToken
因此:
RefreshToken 必须更加安全
六、为什么 RefreshToken 也必须过期
很多人会问:RefreshToken 不就是长期登录么?
注意:
长期 ≠ 永久
因为:
如果黑客拿到:RefreshToken
就能:无限续命
相当于:永久登录权限 风险极大。
所以:
RefreshToken 也必须有生命周期
例如:
| 类型 | 有效期 |
|---|---|
| AccessToken | 30分钟 |
| RefreshToken | 7天 |
当:RefreshToken 过期
用户必须: 重新登录
七、企业真实实现:JWT + Redis
很多人一提 Token:
就只知道:
JWT JWT JWT
实际上 企业里通常:
| Token | 存储方式 |
|---|---|
| AccessToken | JWT |
| RefreshToken | Redis / DB |
因为:
JWT 无法主动撤销
JWT 特点:
- 只要没过期
- 就一直有效
服务端:无法主动干掉
危险。
而 RefreshToken:
企业通常会:Redis 存储
例如:
refresh_token:uuid
→ userId/deviceId/expire
这样服务端就能:
- 主动踢下线
- 单设备登录
- 注销立即失效
- 黑名单控制
- 风险设备拦截
八、Refresh Token Rotation(企业高频方案)
这是很多大厂都会做的。
普通方案:
一个 RefreshToken 一直用
风险:
如果被偷:可长期刷新
于是:
引入 Rotation(轮换机制)
流程:
RT-1
↓ 刷新
RT-2(RT-1失效)
↓ 刷新
RT-3(RT-2失效)
即:
每刷新一次,就废弃旧 RefreshToken
这样即使 旧 Token 泄露:也无法继续刷新
安全性大幅提升。
九、Android 真实实现流程(高频面试)
Android 开发其实非常常见。
1. 请求接口
Authorization: Bearer accessToken
2. AccessToken 过期
服务端返回:
401 Unauthorized
3. OkHttp 拦截器自动刷新
客户端:
自动调用:
POST /refresh
携带:
refreshToken
获取:
newAccessToken
4. 自动重放请求
重新请求原接口:
用户完全无感
这就是:
自动续签机制
十、为什么很多 APP 会“突然掉登录”
很多时候:不是 Bug。
而是:RefreshToken 到期了
例如:
| APP | 登录周期 |
|---|---|
| 微信 | 很长 |
| GitHub | 30天 |
| 企业OA | 7天 |
| 银行APP | 更短 |
超过:RefreshToken 生命周期 ,就必须 重新登录
十一、双 Token 背后的完整安全体系
实际上:双 Token 只是入口。
后面会延伸出:
| 技术 | 作用 |
|---|---|
| JWT | Token 格式 |
| OAuth2 | 授权体系 |
| Spring Security | 安全框架 |
| Gateway 鉴权 | 网关统一认证 |
| SSO | 单点登录 |
| RBAC | 权限模型 |
| HTTPS/TLS | 传输加密 |
| API签名 | 防篡改 |
| 零信任 | 企业安全体系 |
这些:
本质上都是“认证与会话管理”
的延伸。
十二、最终核心理解(非常重要)
企业认证真正解决的:
不是:登录一下
而是:“会话生命周期管理”
包括:
- 登录
- Token签发
- 自动续签
- Token失效
- 主动撤销
- 踢下线
- 多端控制
- 风险控制
- 权限控制
- 设备绑定
这才是真正的:
企业级认证体系
结尾
很多开发:学安全的时候,容易陷入:
背 JWT
背 OAuth2
背 Spring Security
但真正重要的:不是框架。
而是:先理解企业为什么要这样设计
当你真正理解:
- 为什么 Token 要短期有效
- 为什么需要 RefreshToken
- 为什么 RefreshToken 还会过期
- 为什么 Redis 比 JWT 更适合 RefreshToken
你会发现 后面的:
- OAuth2
- Spring Security
- Gateway
- SSO
其实都只是: 工程化实现而已。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)