什么是 JWT?
发布时间
阅读量:
阅读量
1. 什么是 JWT?
JSON Web Token(JWT)作为一种遵循JSON标准(RFC 7519)的安全协议,在通信双方之间实现了可靠的信息传递。该协议通过数字签名技术进行数据校验与身份验证机制设计,在通信双方之间实现了可靠的信息传递。
2. JWT 的结构
JWT 由三部分组成,使用 . 分隔:
header.payload.signature
(1)Header(头部)
头部包含两部分信息:
- 类型:声明使用的是
JWT。 - 算法:说明签名的算法,比如
HMAC SHA256或RSA。
示例:
{
"alg": "HS256",
"typ": "JWT"
}
Base64 编码后:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
(2)Payload(载荷)
Payload 是实际传递的数据,其中存放了一些声明信息,包括:
- 注册声明:例如
iss表示签发者的信息来源,“exp” 则用于指定过期时间的设置,“sub” 则代表主题分类字段,“aud” 则标识受众群体特征。- 公开声明:该系统允许开发者自定义任意键值对配置项,并且必须注意不要泄露敏感信息。
- 私有声明:根据双方协议使用的数据进行处理和存储。
示例:
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
Base64 编码后:
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9
(3)Signature(签名)
签名部分用于验证消息的真实性,防止数据被篡改。签名的生成公式如下:
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret
)
示例:
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
最终完整的 JWT:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
3. JWT 的工作原理
流程:
- 用户登录 :用户通过用户名和密码登录。
- 服务器生成 JWT :服务器验证用户身份后,生成 JWT,通常包含用户信息和权限。
- 客户端存储 JWT :JWT 通常存储在浏览器的
localStorage或sessionStorage中。 - 客户端每次请求携带 JWT :客户端将 JWT 放在请求头中(通常是
Authorization字段),如:
Authorization: Bearer <token>
- 服务器验证 JWT :服务器通过签名密钥对 JWT 进行验证,并进而判断是否应允此请求。
4. JWT 的特点
优点:
- 零状态 :服务器无需保存会话信息,并完全依赖客户端传递的 JWT。
- 轻量级 :结构简单且传输效率高。
- 自洽性 :JWT 包含了验证用户身份所需的所有信息。
- 广泛支持 :几乎涵盖了所有编程语言都能解析和生成 JWT。
缺点:
- 无法撤销 :当生成一个 JWT 时(即一旦被创建),即使用户退出登录操作,在此之前的 JWT 仍然保有活性(直至过期)。
- 大小问题 :每个 JWT 包含用户的详细信息,在数据传输过程中可能会导致较大的带宽消耗。
- 安全性能高度依赖 :如果密钥发生泄露,在整个系统中所生成的所有 JWT 都可能面临被恶意篡改的风险。
5. JWT 的使用场景
- 身份认证:用户登录后,服务端生成 JWT 格式标识符,并将该标识符发送给客户端用于访问受限资源。
- 信息交换:不同服务之间通过安全机制可靠传输信息。
- 单点登录(SSO):JWT 简便地实现了多个系统间的单点登录。
6. JWT 的最佳实践
(1)安全性:
通过https协议保障传输过程中的数据加密
(2)避免敏感数据暴露:
- 不要在 JWT 的
payload中存储敏感信息(如密码、银行卡号)。
(3)设置合理的过期时间:
- 使用
exp字段设置 JWT 的有效期,并结合刷新机制。
(4)防止重复签发:
- 在 JWT 中添加
jti(JWT ID)字段,标识唯一性。
7. 常见问题
JWT 的安全性如何? * 签名机制确保了数据的一致性与不可篡改性;加密密钥仅掌握在授权的发件人与接收者之间
JWT 是否能存存在 Web cookie 中? * 答案是肯定的。如果采用 HttpOnly 属性,则会将 JWT 存储为一个 Web cookie 从而实现提高安全防护能力防止 XSS 攻击。
JWT 的不可篡改性源自何方? * 因为其核心机制将 header 和 payload 索引在其签名部分。
8. 总结
JWT 是一种简洁高效的身份验证方案,在无需状态的分布式系统中表现出色。然而它也存在一些不足,并非万能钥匙。经过科学的设计理念和严格的安全测试,JWT能够为现代Web应用提供高效的身份验证与数据交换方案。
JWT 是一种简洁高效的身份验证方案,在无需状态的分布式系统中表现出色。然而它也存在一些不足,并非万能钥匙。经过科学的设计理念和严格的安全测试,JWT能够为现代Web应用提供高效的身份验证与数据交换方案。
全部评论 (0)
还没有任何评论哟~
