JWT原理

作者: 章音十 | 来源:发表于2020-05-12 13:06 被阅读0次

    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原理

          本文链接:https://www.haomeiwen.com/subject/bglbnhtx.html