zoukankan      html  css  js  c++  java
  • JWT登录验证

    Json Web Token 使用 JSON 来传递数据,用于判定用户是否登录状态####

    基本思想:用户id,加密算法和签名一起存储到客户端,每次请求接口时判断签名是否一致

    jwt由Header,Payload及signature由.拼接而成

    Header
    Header 由非对称加密算法和类型组成,如下

    const header = {
      // 加密算法
      alg: 'HS256',
      type: 'jwt'
    }
    

    Payload 中由 Registered Claim 以及需要通信的数据组成。这些数据字段也叫 Claim。
    Registered Claim 中比较重要的是 "exp" Claim 表示过期时间,在用户登录时会设置过期时间

    const payload = {
      // 表示 jwt 创建时间
      iat: 1532135735,
    
      // 表示 jwt 过期时间
      exp: 1532136735,
    
      // 用户 id,用以通信
      user_id: 10086
    }    
    

    Sign 由 Header,Payload 以及 secretOrPrivateKey 计算而成。

    对于 secretOrPrivateKey,如果加密算法采用 HMAC,则为字符串,如果采用 RSA 或者 ECDSA,则为 PrivateKey。

    // 由 HMACSHA256 算法进行签名,secret 不能外泄
    const sign = HMACSHA256(base64.encode(header) + '.' + base64.encode(payload), secret)
    
    // jwt 由三部分拼接而成
    const jwt = base64.encode(header) + '.' + base64.encode(payload) + '.' + sign
    

    在生成规则中可知,jwt 前两部分是对 header 以及 payload 的 base64 编码。

    当服务器收到客户端的 token 后,解析前两部分得到 header 以及 payload,并使用 header 中的算法与 secretOrPrivateKey 进行签名,判断与 jwt 中的签名是否一致。

  • 相关阅读:
    Linux常用命令
    Springboot环境搭建_第一个例子
    java 填写一个银行卡如何判断是否真实存在
    java 理解如何实现图片验证码 傻瓜都能看懂。
    编程语言学习路线··
    他他他她她她所唱所写………
    Docker 学习笔记 (4)
    Docker 学习笔记 (3)
    Docker 学习笔记 (2)
    Docker 学习笔记 (1)
  • 原文地址:https://www.cnblogs.com/gloria-liu/p/10187457.html
Copyright © 2011-2022 走看看