单点登录之JWT
JWT的构成
JWT分为三部分:头部(header)、载荷(payload)、签名(signature)
-
header
- 声明类型
- 声明加密的算法
{ "alg": "HS256", "typ": "JWT" } 复制代码然后将头部进行base64加密(该加密是可以对称解密的),构成了第一部分.
-
payload
- 保存你想要保存在JWT中的信息(不要包含敏感信息)
{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022, "666": 5456 } 复制代码 -
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不是自己签发的,然后丢弃。
单点登录
单点登录就是在多个系统中,用户只需一次登录,各个系统即可感知该用户已经登录。

京公网安备 11010502036488号