token机制


传统项目大部分采用session机制来追踪用户,如果部署集群,通常做法是将session存储到第三方组件如redis来实现,然而这样还是存在着一个问题,session是通过浏览器的cookie将sessionId发送到服务端来标记对应的会话,而cookie在跨域的情况下将失效,如果是涉及几个不同的系统,这时可能还得引入一个SSO。

JWT

ofa采用jwt(Json web token)生成token来作为用户的凭证。用户登录后,服务端通过密钥生成token返回给前端,前端每次请求都携带token,服务器接收到请求后通过密钥进行校验,服务端不保留用户登陆的信息。

JWT主要由三部分组成:

  • header
  • payload
  • signature

header

jwt的头部承载两部分信息:

  • 声明类型,这里是jwt
  • 声明加密的算法 通常直接使用 HMAC SHA256

payload

载荷就是存放有效信息的地方,这些有效信息包含三个部分

  • 标准中注册的声明
  • 公共的声明
  • 私有的声明

signature

jwt的第三部分是一个签证信息,这个签证信息由三部分组成:

  • header (base64后的)
  • payload (base64后的)
  • secret

完整的token大概如下:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

完整的流程如下:

jwt