title: ID Token description: ID Token 是 OpenID Connect 的核心组件,用于表示用户身份和认证结果,采用 JWT 格式。
🪪 2. ID Token
ID Token 是 OpenID Connect 对 OAuth 2.0 的核心扩展,用于实现终端用户的身份认证(Authentication)。
它是一种 安全令牌(Security Token),包含关于授权服务器对终端用户身份验证的声明(Claims),
以及其他可能请求的声明。
这种令牌采用 JSON Web Token (JWT) 格式表示。
📘 必需和可选的 ID Token Claims
以下是 OpenID Connect 在 OAuth 2.0 流程中使用的 ID Token 声明(Claims):
1. iss(Issuer)
- 必需:响应发出者的标识符。
- 值为区分大小写的 HTTPS URL,包含方案、主机,可选端口号和路径组件。
- 不应包含查询或片段组件。
2. sub(Subject)
- 必需:用户的唯一标识符。
- 在相同的
iss范围内唯一,且不会重新分配。 - 不得超过 255 个 ASCII 字符。
3. aud(Audience)
- 必需:该 ID Token 的目标受众。
- 必须包含 RP 的 OAuth 2.0
client_id,并可包含其他受众标识符。 - 可以是单个字符串或字符串数组。
4. exp(Expiration Time)
- 必需:ID Token 的过期时间。
- 当前时间必须小于
exp的值。 - 值为自 UTC 时间
1970-01-01T00:00:00Z起的秒数。
5. iat(Issued At)
- 必需:JWT 签发时间。
- 值为自 UTC 时间
1970-01-01T00:00:00Z起的秒数。
6. auth_time(Authentication Time)
- 可选:用户身份验证发生的时间。
- 当请求中包含
max_age参数或将auth_time声明设为必要时,该字段为必需。
7. nonce
- 可选:用于将客户端会话与 ID Token 关联的字符串值。
- 同时用于防止重放攻击(Replay Attack)。
- 客户端和服务器应验证
nonce一致性。
8. acr(Authentication Context Class Reference)
- 可选:身份验证上下文的字符串标识符。
- 值可为绝对 URI 或注册名称,具体意义需双方协商。
9. amr(Authentication Methods References)
- 可选:表示身份验证方法的标识符数组。
- 例如:
["pwd", "otp"]表示用户使用密码和一次性密码(OTP)进行认证。
10. azp(Authorized Party)
- 可选:被授权的一方(通常为客户端的
client_id)。
🔒 ID Token 的安全性
ID Token 在安全性方面有严格要求:
✅ 签名与加密
- ID Token 必须使用 JWS 签名,并且 可选加密(JWE)。
- 若加密,则必须 先签名再加密,形成 嵌套 JWT(Nested JWT)。
💡 这可防止令牌在传输过程中被篡改或泄露。
⚙️ 算法约束
- ID Token 不得使用
none作为签名算法,
除非在注册阶段明确声明且授权端点不返回 ID Token。 - 建议使用以下算法:
RS256(推荐,非对称签名)ES256(更安全但兼容性较低)
💡 示例:ID Token Claims
以下是一个非规范性示例(仅用于说明结构):
{
"iss": "https://server.example.com",
"sub": "24400320",
"aud": "s6BhdRkqt3",
"nonce": "n-0S6_WzA2Mj",
"exp": 1311281970,
"iat": 1311280970,
"auth_time": 1311280969,
"acr": "urn:mace:incommon:iap:silver"
}🔧 扩展支持
- ID Token 可以包含 额外的自定义声明(Custom Claims)。
- 未被理解的声明应被 安全地忽略。
- 更多扩展声明可参考官方规范: OpenID Connect Core 1.0, Section 2
✅ 小结
| 分类 | 说明 |
|---|---|
| Token 类型 | JWT(JSON Web Token) |
| 核心作用 | 传递用户身份验证结果 |
| 必须字段 | iss, sub, aud, exp, iat |
| 常见可选字段 | auth_time, nonce, acr, amr, azp |
| 安全要求 | 必须签名(JWS),可选加密(JWE) |
💬 总结: ID Token 是 OpenID Connect 身份层的核心凭证, 它通过签名和可选加密机制,确保客户端能够安全、可信地验证用户身份。 正确理解和验证 ID Token,是实现安全 OIDC 流程的关键。