「Learning」JSON Web Token 入门教程

原文链接: JSON Web Token 入门教程 By 阮一峰

概念

JSON Web Token(JWT)是目前最流行的跨域认证解决方案。

跨域认证

image-20180813142433570

问题:

  • 扩展性不好(可能需要session数据共享)

JWT

原理

  • 生成JSON对象返回给用户
  • 服务器靠这个对象认定用户身份
  • 服务器不保存session数据 ==> 服务器编程无状态

数据结构

img

三个部分(用.分隔:

  • Header(头部)
  • Payload(负载)
  • Signature(签名)

img

  • 是JSON对象
  • 描述JWT的元数据
    • alg 签名的算法
    • typ 令牌的类型
  • Base64URL算法转成字符串
Payload
  • 是JSON对象
  • 存放实际需要传递的数据
    • iss 签发人
    • exp 过期时间
    • sub 主题
    • aud 受众
    • nbf 生效时间
    • iat 签发时间
    • jti 编号
    • 也可以自定义
  • 默认不加密
  • Base64URL算法转成字符串
Signature
  • 对前两部分的签名

  • 指定一个秘钥

使用方法

  • 服务器返回的JWT,客户端可以存储在
    • cookie
    • localStorage
  • 每次通信,客户端都要携带JWT,发送可以放在
    • cookie ==> 自动发送+不能跨域
    • HTTP请求的头信息Authorization字段里
    • POST请求的数据体里

JWT的特点

  • 默认不加密,但是可以加密
  • 不加密情况下,不能将机密数据写入JWT
  • 不仅可以用于验证,也可以交换信息
  • 无法中途废止或更改权限,必须等到期
  • 为了减少盗用
    • 有效期应该设置短一些
    • 对于重要权限,有必要再次进行用户认证
    • 建议使用HTTPS协议传输