跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

【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/

3. JWS的结构与生成规则 参考 https://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html 3.1 JWS的结构

3.2 Header Header 部分本质是一个 JSON 对象,例如

将这个json使用Base64URL算法编码成字符串,就构成了JWT的Header部分:

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

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

编码后内容:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

3.2.1 Header中的kid字段 kid表示加密算法使用了哪个密钥(而不表示密钥的具体内容)。

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

3.4 Signature Signature 部分是对前两部分的签名,防止数据篡改。

首先需要指定一个密钥,然后使用 Header 指定的算法(默认是 HS256),如下产生签名:

HMACSHA256(

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

相关文章