JWT原理

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加密,把加密后的密文和第三段比较。如果相等,认证通过

你可能感兴趣的:(JWT原理)