1、jwt
json web token,一般用于用户认证(前后端分离/微信小程序/app开发)。
- 基于传统的token认证
用户登录,服务端返回token,并将token保存在服务端
以后用户再来访问时,需要携带token,服务端获取token后,再去数据库中获取token进行校验.
- jwt
用户登录,服务端返回token,(服务端不保存)
以后用户再来访问时,需要携带token,服务端获取token后,再做token校验.
优势:相较于传统的token相比,它无需在服务端保存token.
2、jwt实现过程
- 用户提交用户名和密码给服务端,若登录成功,使用jwt创建一个token,并返回给用户。
注意:jwt生成的token是由三段字符串组成,并且用.连接起来。
- 第一段字符串,HEADER,内部包含算法/token类型.
json转化为字符串,然后做base64url 加密(base64加密,遇到+、\用特殊字符替换)。
注意:base64url加密是先做base64加密,然后再将 -
替代 +
及 _
替代 /
。
- 第二段字符串,payload,自定义值。
json转化为字符串,然后做base64url 加密(base64加密,遇到+、\用特殊字符替换)。
- 第三段字符串
第一步:第1.2段部分密文拼接起来
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
第二步:对前两部分密文进行HS256加密 + 加盐(即放一个随机字符串)
第三部,对HS256加密后的密文再做base64url 加密。
- 以后用户再来访问时,需要携带token,后端需要对token进行校验
获取token
第一步:对token根据.进行分割
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI