暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

JWT(JSON Web Token)工作原理总结

羿起小憩 2021-06-30
1207

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
  exp12345678
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

文章转载自羿起小憩,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论