1. JWT和传统token
-
基于传统的token认证
用户登录,服务端给返回token,并将token保存在服务端。
以后用户再来访问时,需要携带token。服务端获取token后,再去数据库取token
-
jwt
用户登陆,服务端给用户返回一个token(服务端不保存)。
以后用户再来访问需要携带token,服务端获取token后,再做token的校验
优势:相较于传统的token,它无需在服务端保存token
2. JWT实现过程
- 第一步,用户提交用户名和密码给服务端,如果登录成功使用
jwt
创建一个token,并给用户返回
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
注意:JWT生成的token是由三段字符串组成的,并且用.
连接起来
- 第一段字符串,HEADER,内部包含算法和token类型,
json
转化为字符串,然后做base64url的转码
{
"alg": "HS256",
"typ": "JWT"
}
-
第二段字符串,
payload
,自定义值.json
转化为字符串,然后做base64url的转码由于只是做了一层编码,所以这些信息都是透明的。不建议在里面传密码之类的敏感信息。
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
-
第三段字符串
- 前两部分的密文拼接起来
- 对前2部分的密文进行HS256加密 + 加盐
- 对HS256加密后的密文再做base64url加密
-
以后用户再来访问,需要携带token,后端需要对token进行校验
- 获取token
- 第一步:对token进行切割
- 第二步:对第二段解码,获取payload,检测token是否超时
- 第三步:把前两段拼接再次执行HS256加密,把加密后的密文和第三段比较。如果相等,认证通过
网友评论