-
概念
JSON Web Token (JWT) 是一个非常轻巧的规范,这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息. 无状态
好处: 不需要服务器端存session了
特点: 可以被看到,但是不能篡改,因为第三部分用了秘钥
一个JWT实际上就是一个字符串,它由三部分组成 : 头部(header), 载荷(payload) ,签名(signature)
如 xxx.yyy.zzz -
头部(Header)
头部用于描述关于该JWT的最基本信息,如类型,及签名用的算法等.是一个json对象
{
"typ": "JWT",
"alg": "HS256"
}
在头部指明 了签名算法是HS256算法,我们进行base64编码如下
ewogICJ0eXAiOiAiSldUIiwKICAiYWxnIjogIkhTMjU2Igp9
- 载荷(payload)
载荷就是存放有效信息的地方,定义一个payload如下:
{
"sub": "3070",
"name": "srr",
"age": 18
}
获取将其进行base64加密,得到jwt的第二部分
ewogICJzdWIiOiAiMzA3MCIsCiAgIm5hbWUiOiAic3JyIiwKICAiYWdlIjogMTgKfQ==
- 签证(signature)
jwt的第三部分是一个签证信息,这个签证信息由三部分组成 :
1. header(base64编码后的)
2. payload(base64编码后的)
3. secret(俗称盐)
这个部分需要base64加密后的header和base64加密后的payload使用.连接组成的字符串,然后通过header中声明的加密方式进行加盐secret组合加密,然后构成了jwt的第三部分
hs256("ewogICJ0eXAiOiAiSldUIiwKICAiYWxnIjogIkhTMjU2Igp9.ewogICJzdWIiOiAiMzA3MCIsCiAgIm5hbWUiOiAic3JyIiwKICAiYWdlIjogMTgKfQ==",secret)
将这三部分用.连接成一个完整的字符串构成了最终的jwt
eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIzMDcwIiwic3ViIjoi5rWL6K-Vand0IiwiaWF0IjoxNjc5OTA5NTg3fQ.kDeXfse-jwXeGnoe-W2fwwLLy7eqgQNyQZxsoe6CCgw