初探jwt

84 阅读2分钟

什么是jwt

jwt是一个自包含的验签方式,用于跨域连接的验证,加密方法可以使用 HMAC 加密或者是 非对称加密,比如 RSA/ ECDSA。

尽管jwt是一个加密信息,但是它只能做一个校验的工具,不能保证安全性,对于安全性的保证更多还是靠https实现

jwt的应用场景

  1. 授权

    这也是jwt最常用的场景。如果用户登录之后,他的每一次请求都会携带jwt,用于他访问路由、路由或者资源的权限校验。由于是请求方携带校验信息,因此jwt可以用于跨域请求。

  2. 交换信息

    如果jwt使用了非对称加密,那么用于两个组织之间交换信息也是非常实用的,一方使用公钥加密,另一方使用私钥解密,可以保证信息不被篡改。

jwt的结构

header(头部)、 payload(载荷)、 signature(签名)

  1. header

  {
      "alg":"HS256"  // 约定加密方式
      "typ":"JWT"    // 固定字段  表明它是jwt
     //这段json格式的信息会用BASE64URL编码转换成字符串放在第一段
  }
  {
      "iss":"xiaoliang"  // 代表这个jwt的签发主体
      "sub":"you are so handsome"    // 代表这个jwt的所有人
      "aud":"xiaoli" // 代表这个jwt的接收对象
      "exp":"12333"  // 代表jwt的有效期
      "giao 123123 yahoo": "ni gei wo li giaogiao" // 自定义的一些信息
     //这段json格式的信息会用BASE64URL编码转换成字符串放在第二段
  }
    1. 使用密钥将前面两段字符串用第一段定义的加密方法进行加密
    2. 把加密结果同样使用BASE54URL编码处理
    3. 结果拼接在最后,这样如果有人篡改数据
    4. 在验签的时候,服务端会再次使用指定的加密算法对前两段进行加密,如果加密结果和第三段字符串不一致,就可以认为数据被篡改。