Web Token

作者: TZX_0710 | 来源:发表于2021-07-20 10:34 被阅读0次

    JSON Web Token

    一般前端向后端发送请求 认证流程如下

    • 可短向服务器发送用户名和密码
    • 服务器验证通过,在当前session保存用户信息
    • 服务器返回给客户端一个sessionId,写入用户cookie。
    • 客户端每次请求携带sessionid。
    • 服务器收到sessionid 进行验证,然后把数据返回给客户端。

    JWT原理

    JWT的原理是,服务器认证以后,生成一个json对象,发送给用户,就像下面这样。

    {

    userName:"张三",
    roles:"admin",

    expireTime:"2018-7-01 12:0:0"

    }

    用户与服务端通信的时候,都要返回该json文件。服务器通过该json对象鉴定用户身份。

    JWT的数据结构

    JWT的组成部分由三个部分组成

    1. Header(头部)

      1. header部分是一个json对象,描述JWT的元数据,通常类似下面

        {
         "alg":"HS256",
         "typ":"JWT"
        }
        

        alg属性表示签名的算法,默认是HMACSHA256;typ属性表示这个令牌(Token)的类型(type),JWT令牌统一写为JWT。

    2. Payload(负载)

      1. Payload部分也是一个json对象,用来存放实际需要传递的数据。JWT规定了7个官方字段,供选用。

        • iss(issuer)签发人

        • exp(expiration time)过期时间

        • sub(subject)主题

        • aud(audience):受众

        • nbf(Not before)生效时间

        • iat(issued AT)签发时间

        • jti(JWT ID):编号

          除了以上字段,还可以定义私一些私有字段。

      JWT默认是不加密的,任何人都可以读到,所以不要把秘密信息放在该部分。这个json对象也要使用base64ul算法转成字符串。

    3. Signature(签名)

      Signature部分是对前两部分的签名,防止数据篡改。首先,需要指定一个密钥,这个密钥只有服务器才知道,不能泄露给用户。然后使用header里面指定的签名算法,默认HMAC SHA256

      HMACSHA256(
        base64UrlEncode(header) + "." +
        base64UrlEncode(payload),
        secret)
      

      算出签名后,把header payload signature三个部分拼成一个字符串,每个部分之间用.分割,

    4. Base64URL

      header和payload串型算法是Base64URL.这个算法跟Base64算法基本类似,但有一些小的不同。JWT作为一个令牌,有些场合可能会放到URL。Base64有三个字符+、/和=,在URL里面有特殊含义,所以要被替换掉:=被省略、+替换成-,/替换成_。这就是Base64URL算法。

    JWT的使用方式

    客户端收到服务器返回的JWT,可以存储再Cookie类里面,也可以存储再localStorage。此后,客户端每次与服务器通信,都要带上这个JWT。你可以把它放在Cookie里面自动发送,但是这样不能跨域,所以更好的做法是放在HTTP请求的头信息Authorization字段里面。

    JWT的特点

    1. JWT默认是不加密的,但也是可以加密的。生成原始Token以后,可以用密钥再次加密一次

    2. JWT不加密的情况下,不能将秘密数据写入JWT

    3. JWT不仅可以用于认证,也可以用于交换信息。有效期使用JWT,可以降低服务器查询数据库的个数。

    4. JWT的最大缺点是,由于服务器不保存session状态,因此无法在使用过程中废弃某个token,或更改token的权限

    5. JWT 本身包含了认证信息,一旦泄露,任何人都可以获得该令牌的所有权限

    6. 为了减少盗用,JWT不应该使用HTTP协议明码传输,使用HTTPS协议传输。

    相关文章

      网友评论

        本文标题:Web Token

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