定义
JWT(JSON Web Token)是一种用于在各方之间安全地传输信息的开放标准 (RFC 7519)。它是一种紧凑的、自包含的方式,用于作为 JSON 对象在各方之间安全地传输信息。JWT 可以被验证和信任,因为它是经过数字签名的。
核心特点
- 紧凑性: JWT 的体积很小,易于传输,可以通过 URL、POST 参数或 HTTP Header 发送。
- 自包含性: JWT 包含了所有需要的信息,接收方无需查询数据库或其他数据源即可验证信息的有效性。
- 安全性: JWT 可以使用密钥或公钥/私钥对进行签名,保证信息的完整性和真实性。
分类
JWT 主要由三个部分组成:
- Header (头部): 描述 JWT 的元数据,包括签名算法和令牌类型。
- Payload (载荷): 包含 JWT 的声明(Claims),声明是关于实体(通常是用户)和其他数据的声明。
- Signature (签名): 通过将 Header、Payload 和密钥进行加密生成的签名,用于验证 JWT 的完整性。
应用
JWT 广泛应用于各种 Web 应用中,例如:
- 身份验证: 验证用户身份,授权用户访问受保护的资源。
- 信息交换: 在各方之间安全地传输信息,例如用户会话信息、API 访问权限等。
- 单点登录 (SSO): 允许用户使用一个账号登录多个应用。
优缺点
- 优点:
- 简单易用: JWT 的结构简单,易于生成和解析。
- 跨域支持: JWT 可以跨域使用,适用于分布式系统。
- 无状态: JWT 是无状态的,服务器无需存储会话信息,降低了服务器的负担。
- 缺点:
- 令牌撤销: JWT 一旦签发,就无法撤销,除非令牌过期。
- 信息泄露: JWT 的 Payload 是 Base64 编码的,虽然不能防止信息被读取,但可以防止信息被篡改。
- 体积较大: 相比于 Cookie,JWT 的体积较大,可能会增加网络传输的负担。
相关概念
- OAuth: 一个开放标准,允许用户授权第三方应用访问其在另一服务提供商处存储的信息,而无需将用户名和密码提供给第三方应用。
- OpenID Connect: 基于 OAuth 2.0 的身份验证协议,用于验证用户身份。
案例
- 用户登录: 用户登录成功后,服务器生成一个 JWT,包含用户 ID 和其他信息,返回给客户端。客户端在后续请求中携带 JWT,服务器验证 JWT 的有效性,授权用户访问受保护的资源。
- API 授权: 客户端请求 API 时,携带 JWT,服务器验证 JWT 的有效性,授权客户端访问 API。
问答卡片
- Q1:JWT 如何保证信息的安全性?
- A:JWT 通过数字签名保证信息的安全性。签名使用密钥或公钥/私钥对 Header 和 Payload 进行加密生成,接收方可以使用相同的密钥或公钥验证签名的有效性,从而保证信息的完整性和真实性。
- Q2:JWT 如何处理令牌撤销的问题?
- A:JWT 一旦签发,就无法撤销,除非令牌过期。为了解决令牌撤销的问题,可以采用以下方法:
- 缩短令牌的有效期: 缩短令牌的有效期,降低令牌泄露的风险。
- 使用黑名单: 维护一个黑名单,记录已撤销的令牌,服务器在验证令牌时,先检查令牌是否在黑名单中。
- 使用 Refresh Token: 使用 Refresh Token 重新获取新的 Access Token,旧的 Access Token 失效。