JWT结构由什么组成

发布时间:2021-12-27 17:41:57 作者:iii
来源:亿速云 阅读:302

JWT结构由什么组成

JSON Web Token(JWT)是一种开放标准(RFC 7519),用于在各方之间安全地传输信息作为JSON对象。JWT通常用于身份验证和信息交换,特别是在Web应用程序中。JWT的结构设计得非常简洁和紧凑,便于在网络中传输。本文将详细介绍JWT的结构及其组成部分。

1. JWT概述

JWT是一种自包含的令牌,包含了所有必要的信息,可以在客户端和服务器之间传递。它由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。这三部分通过点号(.)连接在一起,形成一个完整的JWT。

一个典型的JWT示例如下:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

这个JWT由三部分组成,分别是:

  1. 头部(Header):eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
  2. 载荷(Payload):eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
  3. 签名(Signature):SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

接下来,我们将详细讨论每一部分的结构和内容。

2. 头部(Header)

JWT的头部通常由两部分组成:令牌的类型(typ)和所使用的签名算法(alg)。头部是一个JSON对象,经过Base64Url编码后形成JWT的第一部分。

2.1 令牌类型(typ)

typ字段用于指定令牌的类型。对于JWT,这个字段的值通常是JWT。例如:

{
  "typ": "JWT"
}

2.2 签名算法(alg)

alg字段用于指定用于生成签名的算法。常见的算法包括:

例如,使用HMAC SHA-256算法的头部如下:

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

2.3 Base64Url编码

头部JSON对象经过Base64Url编码后,形成JWT的第一部分。Base64Url编码是一种URL安全的Base64编码,它将+/分别替换为-_,并去掉末尾的=

例如,上述头部经过Base64Url编码后为:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

3. 载荷(Payload)

JWT的载荷部分包含了实际要传递的信息。载荷也是一个JSON对象,经过Base64Url编码后形成JWT的第二部分。载荷中可以包含三种类型的声明:注册声明、公共声明和私有声明。

3.1 注册声明(Registered Claims)

注册声明是预定义的声明,虽然不是强制性的,但建议使用。常见的注册声明包括:

例如,一个包含注册声明的载荷如下:

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

3.2 公共声明(Public Claims)

公共声明是可以由JWT的使用者自定义的声明。为了避免冲突,公共声明应该在IANA JSON Web Token Registry中注册,或者使用防冲突的命名空间。

3.3 私有声明(Private Claims)

私有声明是JWT的创建者和消费者之间约定的自定义声明。这些声明既不是注册声明,也不是公共声明。

3.4 Base64Url编码

载荷JSON对象经过Base64Url编码后,形成JWT的第二部分。例如,上述载荷经过Base64Url编码后为:

eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ

4. 签名(Signature)

签名部分是JWT的最后一部分,用于验证令牌的完整性和真实性。签名是通过将头部和载荷部分连接起来,并使用指定的算法和密钥进行加密生成的。

4.1 生成签名

签名的生成过程如下:

  1. 将头部和载荷部分用点号(.)连接起来,形成一个字符串。
  2. 使用头部中指定的算法和密钥对这个字符串进行加密。
  3. 将加密后的结果进行Base64Url编码,形成签名部分。

例如,使用HMAC SHA-256算法和密钥secret,对上述头部和载荷进行签名:

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

生成的签名经过Base64Url编码后为:

SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

4.2 验证签名

在接收到JWT时,服务器可以通过重新计算签名来验证令牌的完整性和真实性。如果重新计算的签名与JWT中的签名部分一致,则说明令牌未被篡改。

5. JWT的完整结构

将头部、载荷和签名三部分用点号(.)连接起来,就形成了一个完整的JWT:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

6. 总结

JWT是一种简洁、自包含的令牌,由头部、载荷和签名三部分组成。头部指定了令牌的类型和签名算法,载荷包含了实际要传递的信息,签名用于验证令牌的完整性和真实性。通过Base64Url编码和加密算法,JWT可以在网络中安全地传输,并广泛应用于身份验证和信息交换场景。

理解JWT的结构和组成部分,有助于开发者更好地使用和实现JWT,确保应用程序的安全性和可靠性。

推荐阅读:
  1. ssl是由什么组成的
  2. Spring Cloud由什么组成

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

jwt

上一篇:HTTP-revshell是什么意思

下一篇:如何应用地理数据Basemap工具包

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》