状态管理

85 阅读1分钟

状态管理机制

为什么

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
  • 时间戳窗口内+唯一字符串+加签

参考文章

凭证:系统如何保证与用户之间的承诺是准确完整且不可抵赖的