openid-connect 插件将 Apache APISIX与外部 OpenID Connect 身份提供方(Keycloak、Auth0、Okta 等)集成。它支持面向浏览器应用的完整授权码流程、面向 API 客户端的 Bearer Token 校验,以及 Token 内省或本地 JWKS 校验。
自 APISIX 3.18.0 起,该插件还支持嵌套的 PAR 和 DPoP 配置;启用 set_raw_id_token_header 时会转发原始 ID Token;无法确定受信任签发者时会失败关闭;将 claim_validator.audience.match_with_client_id 视作必须存在 audience 声明;并对授权码会话强制执行 required_scopes。当发现服务不可用时,可为 Bearer JWT 校验配置 claim_validator.issuer.valid_issuers。
字段表以及 Keycloak PAR/DPoP 演练请参阅 openid-connect 和 使用 PAR 与 DPoP 保护 OIDC。
适用场景
- 与企业身份提供方集成,例如 Keycloak、Auth0、Okta、Azure AD
- 基于浏览器的授权码流程 SSO
- 使用 Bearer Token 保护 API
- 跨多个路由集中认证
插件配置参考(路由/服务)
必填字段
| 字段 | 类型 | 是否必填 | 默认值 | 说明 |
|---|
client_id | string | 是 | — | OAuth 2.0 客户端 ID |
client_secret | string | 有条件 | — | OAuth 2.0 客户端 Secret,在 etcd 中加密存储。使用本地 JWT 校验、private_key_jwt 或公开客户端 PKCE 流程时可选 |
discovery | string | 是 | — | OIDC well-known 发现 URL |
身份认证与 Scope
| 字段 | 类型 | 是否必填 | 默认值 | 说明 |
|---|
scope | string | 否 | "openid" | 以空格分隔的 OIDC Scope |
bearer_only | boolean | 否 | false | 仅要求 Bearer Token,不进行重定向 |
required_scopes | array | 否 | — | Bearer Token 中必须包含的 Scope |
realm | string | 否 | "apisix" | WWW-Authenticate 请求头中的 Realm |
URI 与重定向
| 字段 | 类型 | 是否必填 | 默认值 | 说明 |
|---|
redirect_uri | string | 否 | {route_uri}/.apisix/redirect | 身份验证后的重定向 URI |
logout_path | string | 否 | "/logout" | 触发退出登录的路径 |
post_logout_redirect_uri | string | 否 | — | 退出登录后的重定向 URL |
unauth_action | string | 否 | "auth" | 未认证时的操作:"auth"(重定向)、"deny"(401)、"pass"(允许) |
Token 校验
| 字段 | 类型 | 是否必填 | 默认值 | 说明 |
|---|
introspection_endpoint | string | 否 | — | Token 内省端点 URL |
public_key | string | 否 | — | 用于本地 JWT 校验的 PEM 公钥 |
use_jwks | boolean | 否 | false | 使用发现文档中的 JWKS 进行本地 JWT 校验 |
token_signing_alg_values_expected | string | 否 | — | 预期的 JWT 签名算法 |