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 (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的...
    Dearmadman阅读 1,062,591评论 214 1,020
  • JWT是URL-safe的,可以用来查询字符参数 JWT分成三部分,每部分之间用.隔开。header.payloa...
    losspm阅读 2,684评论 0 1
  • 常规用户认证需求 用户先通过账号密码登录获取授权后,再获取用户详情信息 对比传统Session和JWT实现该需求的...
    hellsam阅读 3,010评论 0 8
  • JWT是Json web token的缩写,用做webapi的请求校验 基本组成部分:Header.Payload...
    针织衫阅读 288评论 0 1
  • why JWT 现在,前后端分离和 RESTful API 越来越火热,当后台渐渐开始只负责为客户端提供 API ...
    jaychenIsUsed阅读 5,155评论 1 8