Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
ISO/IEC 26132:2024定义了OpenID Connect Discovery 1.0协议,该协议提供了一种机制,使OpenID Connect依赖方(RP)能够发现终端用户的OpenID提供者(OP),并获取与其交互所需的配置信息,包括OAuth 2.0端点位置。
发现过程解决了一个基本问题:给定一个终端用户标识符,客户端应用程序如何知道应该与哪个身份提供者通信,以及应该使用哪些端点?该标准通过使用WebFinger和众所周知的配置端点的两步过程解决了这个问题。
签发者发现过程使用WebFinger协议(RFC 7033)确定OpenID提供者的位置:
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | 用户输入 | 终端用户向RP提供标识符(邮箱、URL或其他格式) |
| 2 | 标准化 | RP标准化标识符以确定资源和主机 |
| 3 | WebFinger请求 | RP向主机的WebFinger端点发送带有resource参数的HTTP GET请求 |
| 4 | 响应解析 | RP从链接关系http://openid.net/specs/connect/1.0/issuer的href值中提取签发者位置 |
标识符标准化支持多种格式:
user@example.com — 标准化为acct:user@example.comhttps://example.com/user — 直接用作资源example.com:8080 — 同时用作资源和主机acct:user@example.com — 显式账户格式一旦发现签发者URL,RP从已知位置检索配置元数据。OP在https://{issuer}/.well-known/openid-configuration发布包含以下内容的JSON文档:
| 元数据字段 | 类型 | 说明 |
|---|---|---|
issuer |
字符串 | OP的签发者标识符URL(必须与发现URL匹配) |
authorization_endpoint |
字符串 | OAuth 2.0授权端点URL |
token_endpoint |
字符串 | OAuth 2.0令牌端点URL |
userinfo_endpoint |
字符串 | OpenID Connect UserInfo端点URL |
jwks_uri |
字符串 | OP的JSON Web密钥集文档URL |
scopes_supported |
数组 | 支持的范围值的JSON数组 |
response_types_supported |
数组 | 支持的响应类型值的JSON数组 |
subject_types_supported |
数组 | 主题标识符类型数组(public或pairwise) |
id_token_signing_alg_values_supported |
数组 | ID Token支持的JWS签名算法数组 |
cache-control标头确定刷新间隔。实施或使用OpenID Connect Discovery时的关键工程考量:
issuer值是否与用于获取它的签发者URL完全匹配。这可以防止恶意提供者伪造身份的网络钓鱼攻击。答:不是。发现是可选的。如果RP已经通过带外机制(如配置文件)知道OP的签发者位置,它可以跳过WebFinger步骤,直接进入提供者配置检索。
答:当用户输入电子邮件地址时,RP将其标准化为acct: URI方案(例如acct:user@example.com),在域名部分执行WebFinger查找,并从响应中接收OpenID提供者签发者URL。这使得任何电子邮件域都可以充当身份提供者。
答:RP应将发现失败视为身份验证错误,并向用户显示适当的消息。实现还应考虑备用机制,例如尝试其他标识符格式或允许手动输入提供者URL。