jwt原理

背景


前两天去某公司面试,问到了这个,感觉他们还是比较在意这个的,我直接说不了解,加上还有些其他问题,导致面试的级别到不到想要的薪资,研究了一下。

JWT

json web token,一般用于身份认证(前后端分离项目,APP项目)

传统token和JWT区别

传统token

用户登录,服务端返回token,并将token返回到服务端,用户下次请求时候
需要携带token,服务端获取token后再去数据库中检验token

jwt

用户端登录,服务端返回token,服务端不保存,
用户下次请求时候需要携带token,服务端检验token
优势:相对于传统token,不需要存储到服务端

JWT实现过程

第一步,用户使用用户密码登录成功,后端服务使用jwt生成一个token返回给用户
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

jwt生成的token由3段字符串组成,由点连接
第一段字符串 header.内部包含一个算法/token类型
json转换为字符串之后base64url加密base64UrlEncode(header) + "." +
{
  "alg": "HS256",
  "typ": "JWT"
}
第二段字符串payload,自定义值
 base64UrlEncode(payload),

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022 #过期时间
}

第三段字符串
将1和2部分密文拼接
将拼接的密文使用hs256加密+加盐
对hs256加密的密文使用bast64url进行加密

以后用户再来访问的时候需要校验token
获取token
对token用点进行切割
把第2部分进行base64URl解密并获取paylod,检测超时时间
把1,2部分评接再次进行hs256加密+加盐
密码=base64(第3部分密码)。相等认证通过

发表评论 / Comment

提示:本文章评论功能已关闭