JSON Web Token (JWT) 中的标准声明(Registered Claims)是由 JWT 规范(RFC 7519)定义的一组预定义的名称,用于确保不同系统之间的互操作性。这些声明是可选的,但强烈推荐使用它们来提高 JWT 的通用性和可读性。
以下是 JWT 标准声明的列表及其含义:
标准声明
-
iss
(Issuer) - 发行者- 描述:标识声明该令牌的主体(通常是服务或系统)。
- 示例:
"iss": "https://auth.mycompany.com"
-
sub
(Subject) - 主题- 描述:代表该令牌的主题(通常是用户 ID 或其他唯一标识符)。
- 示例:
"sub": "user123"
-
aud
(Audience) - 接收方- 描述:指定接收此 JWT 的一方或多方。如果 JWT 包含多个接收方,则应是一个字符串数组。
- 示例:
"aud": ["https://api.mycompany.com"]
-
exp
(Expiration Time) - 过期时间- 描述:指定该 JWT 到期的时间戳(Unix 时间戳,单位为秒)。在此时间之后,该令牌将不再有效。
- 示例:
"exp": 1648723200
(表示 2022-04-01T00:00:00Z)
-
nbf
(Not Before) - 生效时间- 描述:指定该 JWT 在此时间之前不应被处理(Unix 时间戳,单位为秒)。
- 示例:
"nbf": 1648636800
(表示 2022-03-31T00:00:00Z)
-
iat
(Issued At) - 签发时间- 描述:指定该 JWT 的签发时间(Unix 时间戳,单位为秒)。
- 示例:
"iat": 1648636800
(表示 2022-03-31T00:00:00Z)
-
jti
(JWT ID) - JWT 唯一标识符- 描述:提供一个唯一的标识符,可用于防止重播攻击。每个 JWT 应该有唯一的
jti
值。 - 示例:
"jti": "a-1234567890abcdef1234567890abcdef"
- 描述:提供一个唯一的标识符,可用于防止重播攻击。每个 JWT 应该有唯一的
使用示例
以下是一个包含多个标准声明的 JWT 载荷示例:
{
"iss": "https://auth.mycompany.com",
"sub": "user123",
"aud": ["https://api.mycompany.com"],
"exp": 1648723200,
"nbf": 1648636800,
"iat": 1648636800,
"jti": "a-1234567890abcdef1234567890abcdef"
}
自定义声明
除了上述标准声明之外,JWT 还允许添加自定义声明(Private Claims),以满足特定应用的需求。例如,可以添加用户角色、权限等信息作为自定义声明。
示例:
{
"role": "admin",
"permissions": ["read", "write"]
}
注意事项
- 安全性:虽然标准声明有助于提高 JWT 的通用性和可读性,但在设计时仍需考虑安全因素,如避免在 JWT 中存储敏感信息(即使经过签名和加密),以及正确设置过期时间 (
exp
) 和生效时间 (nbf
) 来增强安全性。 - 验证:在验证 JWT 时,通常需要检查标准声明的有效性,特别是
exp
和nbf
,以确保令牌未过期且在其有效期内。
通过合理使用这些标准声明,可以使 JWT 更加规范和易于管理,同时提高系统的安全性和可靠性。