关于jwt

1.jwt认证流程在这里插入图片描述

用户登录成功后,服务端通过jwt生成一个随机token给用户(服务端无需保留token),以后用户再来访问时需携带token,服务端接收到token之后,通过jwt对token进行校验是否超时、是否合法

2.jwt创建token

jwt的生成token格式如下,即:由.连接的三段字符串(Header、payload、signature )组成。

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
  • Header
    固定包含算法和token类型,对此json进行base64url加密,这就是token的第一段

    {
      "alg": "HS256",
      "typ": "JWT"
    } 
    
  • payload
    包含一些自定义的数据,对此json进行base64url加密,这就是token的第二段

    {
      "sub": "1234567890",
      "name": "John Doe",
      "iat": 1516239022
    }
    
  • signature
    把前两段的base密文通过.拼接起来,然后对其进行HS256加密+加盐,再然后对hs256密文进行base64url加密,最终得到token的第三段

    base64url(
        HMACSHA256(
          base64UrlEncode(header) + "." + base64UrlEncode(payload),
          your-256-bit-secret (秘钥加盐)
        )
    )
    
  • 注意:base64url加密是先做base64加密,然后再将-替代+_替代 /

3.jwt校验token

以后用户再次访问时候需要携带token,此时jwt需要对token进行超时及合法性校验

  • 第一步:获取token对其进行切割

    eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
    
  • 第二步:对第二段进行base64url解密,并获取payload信息,检测token是否过期

    {
      "id": "1234567890",
      "name": "chenglong",
      "exp": 1516239022  # 过期时间
    }
    
  • 第三步:把前两段的base密文通过.拼接起来,然后对其进行HS256加密+加盐,再将token的最后一段进行base64url解密,再进行比较

    eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
    
    加密、加盐后的密文 = base64url解密(SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c)
    如果相等,认证通过
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值