JWT -- Json Web Token

什么是 JWT?

JWT(Json Web Token),是一个开源biaozhun,轻量,携带者用户信息的 json 对象,安全的进行服务器端与客户端交互。

因为 JWT 轻量,所以可以放在 Http Header 里,在服务器与客户端之间快速交互;同时,可以将用户名等基本不涉及隐私的用户信息放在 JWT 中,不用再次从数据库中获取。

什么时候使用 JWT?

  • 需要认证:用户根据 username,password 登录后,使用 JWT 返回一个 Token 给客户端,客户端在请求的时候将 Token 放在 Http Header 里

JWT 详解

  • 基本结构

    • Header
    • Payload
    • Signature
  • Header
    用于描述该 JWT 的最基本信息,例如算法。

    {
      "alg" : "HS256"
    }
    

    这里我们说明这个 JWT 的算法是 HS256。同时,对于 Header 我们也要进行 Base64 编码。

  • PayLoad
    负载中由程序员自己定义的一些信息,例如:

    {
      "username": "pm2017",
      "role": "PROJECT_MANAGER",
      "privileges": [
      "RETRIVE_USER"
      ],
      "exp": 1506609371
    }
    

这里我们设置 PayLoad 的内容有 username、role、privileges,以及 exp 过期时间。

  • Signature
    将 Header 和 PayLoad 编码后的字符串用 . 连接在一起,并使用 HS256(Header 中设定的算法)算法与服务端存储的秘钥 secret 一起进行加密,得到的值为 Signature

所以,完整的 JWT 是:header.payload.signature

总结

  1. 缺点
    • 发布后在其有效期内一直有效,只能等过期
  2. 优点
    • JWT 构成简单,字节占用小,便于传输
    • 不会在服务端保存信息,易于扩展
  3. 安全相关
    • 不应该在 JWT 的 Payload 部分存放敏感信息
    • 保存好 secret
  4. 使用 JWT 后,服务端会验证 Token,验证通过会返回相应的资源。整个流程如下图:

你可能感兴趣的:(JWT -- Json Web Token)