指南
OpenID Connect
Discovery、ID Token 与 UserInfo
OpenID Connect
OpenID Connect(OIDC)构建在 OAuth 2.0 之上,新增了身份层:客户端可以通过 ID Token 与 UserInfo 端点获得已认证用户的身份信息。
Discovery
通过 OIDC Discovery 自动发现配置,避免在客户端硬编码端点地址:
GET /.well-known/openid-configuration
响应包含 issuer、authorization_endpoint、token_endpoint、userinfo_endpoint、jwks_uri 及支持的 scopes_supported、response_types_supported 等元数据。OAuth 2.0 的授权服务器元数据另见:
GET /.well-known/oauth-authorization-server
ID Token
在授权码流程的令牌响应中,若请求了 openid scope,会返回 id_token。它是一个 JWS 签名令牌,包含:
| 声明 | 说明 |
|---|---|
iss |
签发者,须与 Discovery 的 issuer 一致 |
sub |
用户唯一标识 |
aud |
目标客户端(你的 client_id) |
exp |
过期时间 |
iat |
签发时间 |
nonce |
与授权请求中的 nonce 一致(如携带) |
email / email_verified |
请求 email scope 时提供 |
name / picture 等 |
请求 profile scope 时提供 |
校验 ID Token
- 从
/.well-known/jwks.json获取签名公钥(JWKS)。 - 使用 RS256 验证签名。
- 校验
iss、aud(须包含你的client_id)、exp。 - 校验
nonce与授权请求一致,防止重放。 - 校验
iat距今不超过可接受范围。
GET /.well-known/jwks.json
UserInfo
使用访问令牌获取用户详细资料:
GET /api/oauth/userinfo
Authorization: Bearer ACCESS_TOKEN
也可通过表单携带 access_token 调用 POST 变体。返回的字段由令牌的 scope 决定:profile 提供姓名、头像等,email 提供邮箱及验证状态。
Scope 与声明
| scope | 提供的主要声明 |
|---|---|
openid |
sub(必选,标识用户) |
profile |
name、preferred_username、picture 等 |
email |
email、email_verified |
offline_access |
可选。授权码换票始终返回刷新令牌;此范围仅作显式声明 |
无提示认证
如用户已登录且会话有效,可请求 prompt=none 获取静默认证结果;未登录时返回 login_required 错误而不会跳转登录页。通过 max_age 可限制允许的会话年龄。