zoukankan      html  css  js  c++  java
  • JWT简要说明

    什么是JWT?

    JSON Web Token (JWT) 是一种开放标准 (RFC 7519) 定义了一种用于安全传输的紧凑、自包含(注:或自说明) 的Json结构, 被传输的信息可以通过JWT内容中的算法+密钥进行加密解密,来确保信息可信。JWT可以使用一个加密串 (使用HMAC 对称算法,或非对称算法RSAECDSA)

    JWT用途

    JWT主要用于两种场景:认证(Authorization)信息加密传递

    JWT结构

    JWT主要分为三部分:

    • Header
    • Payload
    • Signature

    JWT形式为Header.Payload.Signature,三个部分都是json通过Base64加密而成,也就是说:JWT可以被任何人读取,只要使用Base64UrlENcode解密下就可以!(信息加密后边讲)

    下面分别介绍这三部分内容与其组成:

    Header内容

    Header这部分包含令牌所用的算法(alg:algorithm, 常用的有HMAC SHA256或RSA)和 令牌的类型(typ: Token Type,JWT类型只能是"typ":"JWT")未被加密前的样子就像

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

    Payload内容

    Payload这部分包含token的信息,这部分可以包含 已被注册信息、公有的信息、私有的信息,提供了很多可以自定义的部分

    官方给了一些推荐使用的已定义的参数名(已被注册信息):

    • "iss" (Issuer) Claim
    • "sub" (Subject) Claim
    • "aud" (Audience) Claim
    • "exp" (Expiration Time) Claim
    • "nbf" (Not Before) Claim
    • "iat" (Issued At) Claim
    • "jti" (JWT ID) Claim

    官方的例子:

    {
      "sub": "1234567890",
      "name": "John Doe",
      "admin": true
    }
    

    公有的信息、私有的信息都是自定义的,注意不要与官方给的冲突即可,另外注意保持参数尽量少且不要暴露隐私数据

    JWT的长度比较长,如果保存JWT到cookie中,可能会突破cookie的4k存储限制,所以需要保持参数尽量少

    Signature内容

    签名部分使用Header中定义的算法与信息传递方的密钥(公钥/私钥),把经过Base64Url加密的Header与Payload使用.连接在一起,进行加密得出签名。用来验证此JWT信息未被篡改

    最后整体放在一起使用.连接在一起,它长这样:

    下文预警

    本文内容主要是为了引出下文使用JWT作为Spring Security OAuth2的token存储

  • 相关阅读:
    【一篇文章就够了】Apollo
    【一篇文章就够了】Redis入门
    使用IDEA学习廖雪峰官方Git教程
    SourceTree的使用介绍
    【黑马旅游网】总结
    Entity Framework数据迁移命令使用总结
    leetcode editor
    IDEA个性化配置
    mysql5.7驱动(tableau,excel)
    正则表达式(1)
  • 原文地址:https://www.cnblogs.com/hellxz/p/12041701.html
Copyright © 2011-2022 走看看