JWT JSON web Token

2020-03-21  本文已影响0人  麦芽花生糖

先了解下几个名词:

JWT官网

传统的基于token的认证

众所周知,在用户登录验证时,服务端验证用户名密码是否正确,如果验证通过,则生成一个token发送给用户,同时保存这个token到数据库。

JWT

用户登录,服务端返回一个token,但是服务端不保存这个token

以后用户再来访问,需要携带token,服务端基于算法校验token。


JWT实现过程

看一下一个JWT长什么样(这是一句,由3段组成,中间小数点隔开,为了直观,我在小数点处换行)

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
JWT-示例.png

第1、2段是通过base64url编码的,base64url解码结果如下:

atob('eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9')
得到 "{"alg":"HS256","typ":"JWT"}"

atob('eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ')
得到 "{"sub":"1234567890","name":"John Doe","iat":1516239022}"

第3段就有些不同,它的生成步骤如下:

  1. 将第1、2段拼接起来;

  2. 将拼接结果进行加密,加密方法看第一段中有写,这里是HS256,可以加盐;

  3. 对HS256加密后的密文再进行base64url编码。

JWT-第三段.png

校验流程

用户再访问时,如何校验JWT?

1. 获取token

从请求体中取出token。

2. 切割token,进行base64url解码,获取信息

从header(第1段)中得到加密算法类型,这里假设是HS256。

从payload(第2段),一般我们在最初生成token时会带上token的过期时间戳,这里我们检查下过期了没,如果过期了则直接拒绝请求。

3. 校验token是否有效

第3段是用来校验token的,我们把进行

HS256(
    base64Url编码(header) + '.' +
    base64Url编码(payload),
    我加的盐
)

理论上得到的结果应该与第3段完全一致,如果不一致则说明token无效,拒绝请求。

上一篇 下一篇

猜你喜欢

热点阅读