1. JTW的组成
"eyJhbGciOiJIUzUxMiJ9.eyJ1aWQiOiJhODE4YTk51hYWJkLTRhNmItYTgwNy0xMjY2NWYxNjU1YjciLCJleHAiOjE2MjUwNDI1OTB9.0XBkg90w7GCMOyYG6RfL3jUwA57NymmdmEvRivdzrNixP7OwoBXnMKP7UQyUdoMrLZOBbtNgY-x5ywiSfKHIE"

一个JWT实际上就是一个字符串,它由三部分组成:头部、载荷与签名。
(1) 头部(Header) :用于描述关于该JWT的最基本的信息,如类型和签名算法
{
"typ":"JWT",
"alg":"HS256"
}
BASE64编码:https://www.base64decode.org/
(2)载荷(playload):
{"uid":"aaaabbbddeeee44455qqqqqqqggg","exp":1625042590}
payload = {iat: 1532135735;exp: 12345678;userid: 123456}
(3)签名(signature)
header
payload
secret
signature签名=加密算法(header + “." + payload, 密钥secret)
需要指定一个密钥(secret),这个密钥存在服务器端。使用 Header 里面指定的签名算法(默认是 HMAC SHA256),按照下面的公式产生签名。
String sign = HMACSHA256(base64.encode(header) + '.' + base64.encode(payload), secret)String jwt = base64.encode(header) + '.' + base64.encode(payload) + '.' + sign
2. JWT工作原理


3. JWT如何验证用户权限
JWT payload中的信息相当于明文,都可以通过 base64解码得到明文,服务器端拿到JWT 信息后,解码payload即可得到用户信息,如userid,再根据userid判断该用户的权限
4. 服务器如何验证Token
主要看signature签名,因为header和payload相当于明文
服务器端再次执行signature=加密算法(header + “." + payload, 密钥),然后对比签名是否一致。
密钥secret只保存在服务器端
Reference:https://mp.weixin.qq.com/s/QDTRkPmgScM9GZpwAW8VEQ




