您的位置:首页 > 其它

JWT简要说明

2019-12-15 00:56 736 查看

什么是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存储

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: