Skip to Content
MUZINET-NOTE 4.0 is released 🎉

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 流程的关键。