1、JWT 的简述
JWT(JSON Web Token)是一种用于在网络上安全地传输信息的简洁的、URL 安全的表示方法,它定义了一个紧凑且自包含的方式,用于不同实体之间安全地传输信息(JSON格式)。以下是关于 JWT 的详细介绍:
1.1 JWT 的组成
JWT 通常由三部分组成,分别是 Header(头部)、Payload(有效载荷)和 Signature(签名)。
- Header(头部):头部通常包含两部分信息,即声明类型和声明所使用的算法。声明类型通常是 JWT,而声明所使用的算法则可以是 HMACSHA256、RSA 等。头部信息会进行 Base64URL 编码,形成 JWT 的第一部分。
- Payload(有效载荷):有效载荷包含了具体的用户信息,如用户ID、用户名、角色等,也可以包含自定义的其他信息。这些信息以 JSON 格式进行编码,并且同样经过 Base64URL 编码,形成 JWT 的第二部分。Payload 中的声明可以分为三类:Reserved claims(标准声明)、Private claims(私有声明)和Public claims(公共声明)。
- Signature(签名):签名是 JWT 的第三部分,它使用 Header 和 Payload 中的数据以及一个密钥来生成。签名的目的是保证消息没有被篡改,并且只能被服务器端识别和验证。签名也是通过特定的算法(如HMACSHA256)生成的,并会附加到JWT的末尾。
1.2 JWT 的工作原理
在用户登录后,系统会生成一个 JWT 返回给用户。用户的每次请求都会携带这个 JWT,通常将其放在 HTTP 请求的头部(如Authorization头部,使用Bearer模式)。服务器在接收到请求后,会验证 JWT 的签名以确认其完整性和来源,并根据 JWT 中的信息来认证用户或授权用户对资源的访问。
1.3 JWT 的优点
- 简洁和紧凑:JWT 是一个字符串,不占空间,传输速度快。
- 自包含:JWT 包含了用户信息和签名,服务器端不需要再查询数据库或其他存储来获取用户信息,实现了去中心化的验证。
- 跨语言支持:由于 JWT 是基于标准的 JSON 格式和 Base64URL 编码实现的,因此它可以在不同的平台和语言之间进行传输和解析。