Authn.tech
首页
  • SAML 2.0
  • OAuth 2.0
  • OIDC
  • 工具总览
  • JWT 解析器
  • SAML 编解码
  • 端点与说明
  • OIDC 登录演示
GitHub
首页
  • SAML 2.0
  • OAuth 2.0
  • OIDC
  • 工具总览
  • JWT 解析器
  • SAML 编解码
  • 端点与说明
  • OIDC 登录演示
GitHub
  • OpenID Connect

    • OIDC 概述
    • 核心概念
    • 典型流程
    • 典型参数与 Claims 参考

典型参数与 Claims 参考

本页为速查表,流程语境见典型流程,概念解释见核心概念。

认证请求参数

发往 authorization endpoint 的参数(OIDC 视角,含 OAuth2 基础参数):

参数必需性说明
scope必需空格分隔;必须包含 openid,否则就是普通 OAuth2 请求,不会返回 ID Token
response_type必需决定 flow:code(推荐)/ id_token / code id_token 等
client_id必需RP 在 OP 注册获得的客户端标识
redirect_uri必需回调地址,必须与注册值精确匹配(不允许通配)
state强烈建议不透明随机值,回调时原样返回;RP 校验以防 CSRF,也可携带回跳路径等状态
noncecode flow 建议,implicit/hybrid 必需随机值,OP 原样写入 ID Token 的 nonce claim;RP 校验以防重放
prompt可选控制 OP 交互行为,见下方 prompt 取值表
max_age可选认证最大有效秒数;若用户上次认证距今超过该值,OP 必须重新认证,并在 ID Token 返回 auth_time
login_hint可选提示登录标识(如邮箱),OP 可预填登录框,常用于"已知用户是谁"的场景
acr_values可选期望的认证上下文等级(空格分隔、按优先级),如要求 MFA;结果体现在 ID Token 的 acr
display可选期望的展示方式:page / popup / touch / wap
ui_locales可选期望的界面语言,如 zh-CN zh en
code_challenge / code_challenge_method公共客户端必需PKCE 参数,method 用 S256

ID Token Claims

必需 claims

Claim类型说明
issstring (URL)签发者,必须等于 OP 的 issuer
substring (≤255 ASCII)用户唯一标识,同一 OP 内稳定不复用;本地主键用 iss + sub
audstring 或 array受众,必须包含 RP 的 client_id
expnumber过期时间(Unix 秒)
iatnumber签发时间(Unix 秒)

条件必需 / 可选 claims

Claim何时出现说明
nonce请求带了 nonce 则必需原样返回请求中的 nonce,RP 必须比对
auth_time请求带 max_age 时必需,其余可选用户实际认证时间
acr可选达到的认证上下文等级
amr可选认证方法数组,如 ["pwd","otp"]、["mfa"]
azpaud 多值时必需实际被授权方的 client_id
at_hashimplicit/hybrid 同时返回 access_token 时必需access token 哈希左半段,防 token 替换
c_hashhybrid 返回 code 时必需授权码哈希左半段
sid可选OP 端会话 ID,Back-Channel Logout 按它定位 RP 会话

标准 Claims 一览(按 scope 分组)

这些 claims 出现在 UserInfo 响应或 ID Token 中:

scope=profile

Claim类型说明
namestring全名(展示用)
given_namestring名
family_namestring姓
middle_namestring中间名
nicknamestring昵称
preferred_usernamestring首选用户名;可能变化且可能重复,不能当主键
picturestring (URL)头像地址
profilestring (URL)个人主页
websitestring (URL)个人网站
genderstring性别
birthdatestring生日,YYYY-MM-DD 或 YYYY(0000 表示仅提供月日)
zoneinfostring时区,如 Asia/Shanghai
localestring区域,如 zh-CN
updated_atnumber资料最后更新时间(Unix 秒)

scope=email

Claim类型说明
emailstring邮箱
email_verifiedboolean邮箱是否经 OP 验证;做邮箱匹配的业务逻辑前必须检查它为 true

scope=phone

Claim类型说明
phone_numberstring电话,建议 E.164 格式,如 +8613800138000
phone_number_verifiedboolean是否经验证

scope=address

Claim类型说明
addressJSON object含 formatted、street_address、locality、region、postal_code、country 子字段

Discovery 文档关键字段

/.well-known/openid-configuration 中 RP 最常用的字段:

字段说明
issuerOP 标识,必须与请求该文档所用的 issuer 一致,也是 ID Token iss 的预期值
authorization_endpoint认证/授权端点
token_endpoint令牌端点
userinfo_endpoint用户信息端点
jwks_uri公钥集(JWKS)地址
end_session_endpointRP-Initiated Logout 端点(RP-Initiated Logout 规范定义)
registration_endpoint动态客户端注册端点(如支持)
scopes_supported支持的 scope 列表
response_types_supported支持的 response_type
subject_types_supportedpublic / pairwise
id_token_signing_alg_values_supportedID Token 签名算法,RP 据此设白名单
token_endpoint_auth_methods_supportedtoken 端点客户端认证方式,如 client_secret_basic、private_key_jwt
claims_supported可返回的 claims 列表(信息性)
code_challenge_methods_supported支持的 PKCE 方法,应含 S256
frontchannel_logout_supported / backchannel_logout_supported是否支持前端/后端通道登出

prompt 取值表

取值行为典型用途
noneOP 不得展示任何交互界面;无活跃会话或需交互时直接返回错误(如 login_required)静默检查登录态 / SSO 探测 / token 续期
login强制重新认证,即使已有会话敏感操作前二次确认身份(step-up)
consent强制重新展示授权确认页需要用户重新授予权限
select_account展示账号选择界面用户有多账号,允许切换

prompt 可组合(如 login consent),但 none 不能与其他值同用。

OIDC 新增错误码

在 OAuth2 错误码(invalid_request、access_denied、invalid_grant 等,见 OAuth2 文档)之外,OIDC 在授权端点新增:

错误码含义常见触发
login_required需要用户登录,但不允许交互prompt=none 且 OP 无活跃会话
consent_required需要用户授权确认,但不允许交互prompt=none 且该客户端未获同意
interaction_required需要某种用户交互,但不允许交互prompt=none 的兜底错误
account_selection_required需要用户选择账号,但不允许交互prompt=none 且存在多账号会话
invalid_request_urirequest_uri 无法获取或内容非法使用 PAR/request_uri 的场景
invalid_request_objectrequest 对象(JWT)非法使用签名请求对象(JAR)的场景
request_not_supported / request_uri_not_supportedOP 不支持 request(_uri) 参数能力不匹配
registration_not_supportedOP 不支持 registration 参数能力不匹配

提示

login_required 是正常信号而非故障:静默续期(prompt=none)收到它,应回退为一次带交互的常规登录。

排错速查表

现象常见原因
回调报 redirect_uri_mismatch / invalid_requestredirect_uri 与注册值不完全一致(协议、端口、末尾斜杠、大小写)
token 响应里没有 id_token请求的 scope 漏了 openid
ID Token 校验失败:iss 不匹配issuer 配置带/不带末尾斜杠不一致;多租户 OP 用错了租户 URL
ID Token 校验失败:签名无效 / 找不到 kidJWKS 缓存过期(OP 已轮换密钥),需刷新 JWKS;或环境配错拿了别的 OP 的 JWKS
ID Token 校验失败:aud 不匹配用了别的应用的 client_id;或把发给其他客户端的 token 拿来验证
nonce 校验失败会话丢失(回调落在另一实例且 session 未共享)、Cookie 的 SameSite 设置导致回调请求不带会话 Cookie
invalid_grant(换 token 失败)授权码已使用/过期(码只能用一次,注意浏览器预取或重复回调);PKCE code_verifier 与 code_challenge 不匹配;redirect_uri 与授权请求时不一致
prompt=none 总是返回 login_requiredOP 无会话(第三方 Cookie 被浏览器拦截是常见根因);或 OP 侧要求重新同意
登出后刷新又是登录态只清了 RP 会话没跳 end_session_endpoint,被 OP 的 SSO 会话静默重登
登出后没有跳回应用post_logout_redirect_uri 未在 OP 侧登记,或未携带 id_token_hint 导致 OP 无法关联客户端
拿不到 email/name 等 claims未申请对应 scope;或该 OP 只在 UserInfo 返回这些 claims 而 RP 只解析了 ID Token
时好时坏的 exp/iat 校验失败服务器时钟漂移,配置 NTP 并允许 ≤5 分钟 clock skew
最近更新: 2026/7/3 08:17
贡献者: linux, Claude Fable 5
Prev
典型流程