状态管理机制
为什么
HTTP的无状态性
解决方案
方案1 单机Session会话管理
优点:无状态的信息都存储在服务器中,再加上Client的同源策略,利用Https,Cookie-Session是单机时的不错的状态管理机制。 缺点:服务器水平扩展时,失效。
方案2 集中式Session会话管理
session存redis等独立的节点中,解决了单机版中的会话共享问题。
这种方案,其实就已经不是:RFC 6265规范定义了的HTTP的状态管理机制了,因为这条规范是在HTTP 协议中增加了 Set-Cookie 指令。
3 JWT
jwt并不是替代cookie-session的,他只是cookie-session在认证、授权问题上的一个替代品,充其量能携带少量非敏感的信息. JWT是如何解决HTTP无状态下的认证、授权问题的呢?
| 方案 | 特点 | 优点 | 缺点 |
|---|---|---|---|
| cookie_session | 简单;服务器可以管理会话的创建、销毁 | 无法水平扩展 | |
| jwt | 可以携带少量信息。包括:令牌头、负载payload、签名 | 服务器端可以任意水平扩展 | 服务器无法随时管理会话,凭证一旦签发,只能等待自动失效; 必须考虑令牌在客户端如何存储 |
3.1 扩展
1、 jwt层面如何防止重放攻击 建议在信道层次(比如启用 HTTPS)上解决,而不提倡在服务层次(比如在令牌或接口其他参数上增加额外逻辑)上解决。
- https
- 时间戳窗口内+唯一字符串+加签