JWT Token 的结构

JSON Web Token 包含用点(".")分隔的三部分:

形如:


Header 通常包含两部分:

下面是一个例子:

使用 Base64Url 对 Header 进行编码,形成 JWT 的第一部分。


Payload

JWT 的第二部分是 Payload。它包含声明,声明是关于实体(实体通常是用户)和可选元数据的一系列语句。有三种类型的声明:预留的、公有的、私有的。

下面是一个例子:

使用 Base64Url 对 Payload 进行编码,形成 JWT 的第二部分。


Signature

签名部分使用编码后的 Header编码后的 Payload密钥以及** Header 中指定的算法**生成。

假如算法是 HMAC SHA256,那么签名的计算方式是:

签名用于核实 JWT 的发送者,确保消息没有被篡改。


合并起来

JWT 包含三个用点分隔的 Base64 字符串。

下面是一个示例 JWT:

encoded-jwt.png


使用示例(Python)

依赖包:

代码:


JTI 和 Replay Attack

重放攻击(Replay Attacks)又称重播攻击、回放攻击或新鲜性攻击(Freshness Attacks),是指攻击者发送目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的正确性。

jti 是被放到 JWT 中的唯一 ID,可以防止重放攻击。


参考文档