【JWT】JWT JWS JWE | 结构与生成规则 | 在线JWS解析工具

1. JWT、JWS、JWE对比

主要参考:
https://www.51cto.com/article/630971.html

辅助参考:
https://www.jianshu.com/p/50ade6f2e4fd

1.1 JWT

JWT:JSON Web Token,包括header、payload、signature(可有可无)

  • 不包含signature则是nonsecure JWT
  • 包含signature则是JWS

1.2 JWS

JWS:JSON Web Signature,一种JWT,特点是包含signature

为了完成签名,除了header和payload外,还需要密钥,也就是secret。
当利用非对称加密算法时,secret为私钥。

到目前为止,jwt的签名算法有三种。

  • 对称加密HMAC:HS256/HS384/HS512
  • 非对称加密RSA:RS256/RS384/RS512
  • 非对称加密ECDSA:ES256/ES384/ES512

1.3 JWE

JWE:JSON Web Encryption

JWE是保护数据不被第三方的人看到的;通过JWE,JWT变得更加安全。

JWS可以直接被解析出内容,但JWE不可以,必须在已知密钥(例如,对称密钥)的情况下才能查看其内容。

解析过程参考:https://blog.csdn.net/gzroy/article/details/124868528

JWE一共有五个部分,分别是:

  • The protected header,类似于JWS的头部;
  • The encrypted key,用于加密密文和其他加密数据的对称密钥;
  • The initialization vector,初始IV值,有些加密方式需要额外的或者随机的数据;
  • The encrypted data (cipher text),密文数据;
  • The authentication tag,由算法产生的附加数据,来防止密文被篡改。

2. 在线JWT解析工具

https://jwt.io/

【JWT】JWT JWS JWE | 结构与生成规则 | 在线JWS解析工具_第1张图片

3. JWS的结构与生成规则

参考
https://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html

3.1 JWS的结构

【JWT】JWT JWS JWE | 结构与生成规则 | 在线JWS解析工具_第2张图片
【JWT】JWT JWS JWE | 结构与生成规则 | 在线JWS解析工具_第3张图片
【JWT】JWT JWS JWE | 结构与生成规则 | 在线JWS解析工具_第4张图片

3.2 Header

Header 部分本质是一个 JSON 对象,例如
【JWT】JWT JWS JWE | 结构与生成规则 | 在线JWS解析工具_第5张图片

将这个json使用Base64URL算法编码成字符串,就构成了JWT的Header部分:
【JWT】JWT JWS JWE | 结构与生成规则 | 在线JWS解析工具_第6张图片
【JWT】JWT JWS JWE | 结构与生成规则 | 在线JWS解析工具_第7张图片

Base64URL在线编码工具:
http://www.lzltool.com/base64url

JSON内容:

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

编码后内容:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
3.2.1 Header中的kid字段

kid表示加密算法使用了哪个密钥(而不表示密钥的具体内容)。
【JWT】JWT JWS JWE | 结构与生成规则 | 在线JWS解析工具_第8张图片

3.3 Payload

Payload 部分也是一个 JSON 对象,这个 JSON 对象也要使用 Base64URL 算法转成字符串

【JWT】JWT JWS JWE | 结构与生成规则 | 在线JWS解析工具_第9张图片
【JWT】JWT JWS JWE | 结构与生成规则 | 在线JWS解析工具_第10张图片
【JWT】JWT JWS JWE | 结构与生成规则 | 在线JWS解析工具_第11张图片

3.4 Signature

Signature 部分是对前两部分的签名,防止数据篡改。
首先需要指定一个密钥,然后使用 Header 指定的算法(默认是 HS256),如下产生签名:

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

你可能感兴趣的:(常识,密码学,json)