单点登录之JWT

JWT的构成

JWT分为三部分:头部(header)、载荷(payload)、签名(signature)

  1. header

    • 声明类型
    • 声明加密的算法
    {
      "alg": "HS256",
      "typ": "JWT"
    }
    复制代码

    然后将头部进行base64加密(该加密是可以对称解密的),构成了第一部分.

  1. payload

    • 保存你想要保存在JWT中的信息(不要包含敏感信息)
    {
      "sub": "1234567890",
      "name": "John Doe",
      "iat": 1516239022,
      "666": 5456
    }
    复制代码
  2. signature

    • header(base64后的)
    • payload (base64后的)
    • secret (服务端签发jwt的密钥,不能暴露,否则客户端可以自己签发JWT)

    这个部分需要base64加密后的header和base64加密后的payload使用.连接组成的字符串,然后通过header中声明的加密方式进行加盐secret组合加密,然后就构成了jwt的第三部分。

JWT总结

JWT由三部分组成,第一部分是加密算法,第二部分是负载。(这两部分是使用BASE64进行加密的,可以不需要密钥直接解密)

JWT的重点是第三部分,第三部分是对第一和第二部分加密后的字符串,使用第一部分中声明的算法配合服务器密钥生成的

ps: 以前刚学JWT的时候,同学问我一个问题,JWT不是说加密了吗,那为什么我还能从JWT中获取到我的原始信息呢?

答:确实,攻击者可以将JWT的前两部分在不需要密钥的情况下解密出来然后修改其中的数据,但是,攻击者因为没有密钥,无法对修改后的数据生成第三部分(签名),如果攻击者将这个修改后的JWT发送到了服务器,服务器会发现签名不正确,从而判定这个JWT不是自己签发的,然后丢弃。


单点登录

单点登录就是在多个系统中,用户只需一次登录,各个系统即可感知该用户已经登录

参考:juejin.im/post/5cdd42…