参数
请参阅 插件通用配置 了解所有插件可用的配置选项。
该插件支持使用 env:// 前缀引用环境变量中的敏感参数值,或使用 secret:// 前缀引用 Secret 管理器(如 HashiCorp Vault 的 KV 密钥引擎)中的值。更多信息,请参阅环境变量中的插件和密钥。
client_id
客户端 ID。
client_secret
客户端密钥。该值在存储到 etcd 之前会使用 AES 加密。
自 API7 企业版 3.9.14 和 APISIX 3.17.0 起,对于不与 OpenID 提供商通信的本地 JWT 验证模式(例如将
bearer_only与public_key或use_jwks组合使用),客户端密钥是可选的。使用private_key_jwt进行客户端身份认证,或授权码流程使用 PKCE 时,客户端密钥也是可选的。对于使用客户端密钥向提供商进行身份认证的流程(例如 Token 内省或不使用 PKCE 的授权码流程),客户端密钥仍为必填项。discovery
OpenID 提供商的 well-known 发现文档的 URL,其中包含 OP API 端点 列表。插件可以直接使用发现文档中的端点。你也可以单独配置这些端点,这将优先于发现文档中提供的端点。
scope
对应于应返回的有关已认证用户信息的 OIDC 范围,也称为 claims。这用于通过适当的权限对用户进行授权。默认值为
openid,这是 OIDC 返回唯一标识已认证用户的subclaim 所需的范围。其他范围可以追加并用空格分隔,例如
openid email profile。required_scopes
授权所需的范围。如果缺少任一必需范围,插件将以
403 Forbidden拒绝请求。使用 Bearer Token 内省时,范围从内省响应中读取。在 APISIX 3.18.0 中,授权码会话也会接受检查:范围先从访问 Token 读取,再从 ID Token 读取;如果无法确定会话获授的范围,则拒绝该会话。API7 企业版 3.9.18 和 3.10.5 仅在 Bearer Token 内省时强制执行此字段。
realm
因身份认证失败而返回
401 Unauthorized响应时,WWW-Authenticate响应头中的 Realm。例如:如果
realm设置为apisix-oidc,401 响应将包含以下响应头:WWW-Authenticate: Bearer realm="apisix-oidc"如果未配置
realm,401 响应将包含以下响应头:WWW-Authenticate: Bearer realm="apisix"
claim_validator
JWT Claim 验证配置。
issuer
Claim 颁发者验证配置。
valid_issuers
本地 JWT 验证信任的颁发者。省略时,APISIX 使用发现文档中的颁发者;无法确定受信任颁发者时,APISIX 会拒绝 Token。API7 企业版 3.9.18 和 3.10.7 在发现失败时会跳过颁发者验证,除非显式配置该列表;3.9.21 和 3.10.8 则会拒绝请求。
在 API7 企业版 3.9.21、3.10.8 和 APISIX 3.19.0 中 ,显式列表也适用于远程内省。响应必须包含与列表匹配的字符串
iss,否则身份认证返回 HTTP 401。空列表会拒绝所有颁发者;省略该字段则不会对内省执行此检查。API7 企业版 3.10.7 不会将该列表应用于远程内省响应。
audience
受众 Claim 验证配置。
claim
包含受众的 Claim 名称。
required
如果为 true,则受众 Claim 是必需的,且 Claim 名称将是在
claim中定义的名称。 例如,假设claim_validator配置如下:json { "audience": { "claim": "custom_claim", "required": true } }如果请求中不存在 Claimcustom_claim,你将收到required audience claim not present错误。match_with_client_id
如果为 true,则要求受众与客户端 ID 匹配。如果受众是字符串,则必须与客户端 ID 完全匹配;如果受众是字符串数组,则必须至少有一个值匹配。在 APISIX 3.18.0 中,此选项也会拒绝缺少受众 Claim 的 Token。API7 企业版 3.9.18 和 3.10.5 仅在该 Claim 存在时进行匹配;如需拒绝缺少 Claim 的 Token,请同时将
required设置为true。此要求在 OpenID Connect 规范 中说明,以确保 Token 是针对特定客户端的。
claim_schema
用于验证 OIDC 响应中返回的 Claim 的 JSON Schema。例如,schema
{"type":"object","properties":{"access_token":{"type":"string"}},"required":["access_token"]}确保响应包含名为access_token的必需字符串字段。从 APISIX 3.14.0 和 API7 企业版 3.9.2 起可用。
bearer_only
如果为 true,则严格要求请求中包含 Bearer 访问 Token 以进行身份认证。
logout_path
激活注销的路径。
post_logout_redirect_uri
logout_path收到注销请求后将用户重定向到的 URL。redirect_uri
与 OpenID 提供商认证后重定向到的 URI。
请配置包含协议方案和主机的完全限定 URI。其路径应当匹配路由,但不能与受保护的请求路径完全相同。例如,如果路由
uri为/api/v1/*,请把redirect_uri设为https://gateway.example.com/api/v1/redirect。如果未配置
redirect_uri,或其值是以/开头的根相对路径,网关会根据请求的协议方案和主机构建 URI。它会保留请求中显式指定的端口,并且仅当直接代理位于apisix.trusted_addresses中时才使用转发的来源请求头。完全限定 URI 不依赖从请求推导的来源。请在 OpenID 提供商中把同一 URI 配置为允许的重定向 URI。
timeout
有效值:
大于 0
请求超时时间(秒)。
ssl_verify
如果为
true,则验证 OpenID 提供商的 SSL 证书。自 APISIX 3.16.0 和 API7 企业版 3.9.8 起,默认值由
false更改为true。这是一个不兼容变更。introspection_endpoint
OpenID 提供商用于内省访问 Token 的Token 内省端点 URL。如果未设置,则使用 well-known 发现文档中提供的内省端点作为后备。
introspection_endpoint_auth_method
Token 内省端点的身份认证方法。该值应为 well-known 发现文档中
introspection_endpoint_auth_methods_supported授权服务器元数据指定的身份认证方法之一,例如client_secret_basic、client_secret_post、private_key_jwt和client_secret_jwt。使用默认的
client_secret_basic时,客户端凭据仅通过Authorization请求头发送。如果身份提供商要求在内省请求体中接收凭据,请将此字段设置为client_secret_post。token_endpoint_auth_method
Token 端点的身份认证方法。该值应为 well-known 发现文档中
token_endpoint_auth_methods_supported授权服务器元数据 指定的身份认证方法之一,例如client_secret_basic、client_secret_post、private_key_jwt和client_secret_jwt。如果插件不支持配置的方法,则忽略该配置,并使用 OpenID 提供商公布的第一个可用方法。如果插件支持配置的方法,但
token_endpoint_auth_methods_supported已提供且不包含该方法,则 Token 端点身份认证失败。client_rsa_private_key
用于签署客户端断言 JWT 的私钥。当 Token、内省或 PAR 端点选择
private_key_jwt时必填。密钥类型必须与client_jwt_assertion_alg匹配:RS*使用 RSA 密钥,ES*使用对应曲线上的 EC 密钥。该值在存储到 etcd 前会使用 AES 加密。
client_rsa_private_key_id
端点选择
private_key_jwt时,签名客户端断言 JWT 中使用的可选密钥 ID。client_jwt_assertion_expires_in
Token、内省或 PAR 端点使用
private_key_jwt或client_secret_jwt时,客户端断言 JWT 的生命周期(秒)。public_key
如果使用非对称算法,则用于验证 JWT 签名的公钥。提供此值以执行 Token 验证将跳过客户端凭据流程中的 Token 内省。
你可以使用
-----BEGIN PUBLIC KEY----- …… -----END PUBLIC KEY-----格式传递公钥。token_signing_alg_values_expected
用于签署 JWT 的算法,例如
RS256。set_access_token_header
如果为
true,则在请求头中设置已认证请求所使用的访问 Token。默认使用X-Access-Token请求头。网关会先清除客户端提供的同名值,再设置该 Token。access_token_in_authorization_header
如果为
true且set_access_token_header也为true,则在Authorization请求头中设置访问 Token。accept_none_alg
如果 OpenID 提供商不对其 ID Token 进行签名(例如当签名算法设置为
none时),则设置为 true。use_jwks
如果为 true 且未设置
public_key,则使用 JWKS 验证 JWT 签名并跳过客户端凭据流程中的 Token 内省。JWKS 端点从发现文档中解析。jwk_expires_in
JWK 缓存的过期时间(秒)。
jwt_verification_cache_ignore
如果为 true,则强制重新验证 Bearer Token 并忽略任何现有的缓存验证结果。
cache_segment
缓存段的可选名称,用于分隔和区分 Token 内省或 JWT 验证使用的缓存。
use_pkce
如果为 true,则对授权码流程使用用于代码交换的证明密钥 (PKCE),如 RFC 7636 中所定义。
set_id_token_header
如果为 true 且经过验证的 ID Token 可用,则在
X-ID-Token请求头中设置经过 Base64 编码的解码后 Claim。该值不是签名 JWT,无法使用身份提供商的 JWKS 进行验证。网关会先清除客户端提供的同名值。set_userinfo_header
如果为 true 且用户信息数据可用,则在
X-Userinfo请求头中设置该值。网关会先清除客户端提供的同名值。set_raw_id_token_header
如果为 true 且原始 ID Token 可用,则把身份提供商签发的原始签名 JWT 添加到
X-Raw-ID-Token请求头中。该 Token 会持久化到会话,以便上游服务使用身份提供商的 JWKS 进行验证。自 API7 企业版 3.9.17 和 3.10.4 以及 APISIX 3.18.0 起可用。原始 ID Token 属于 bearer 凭证。请仅对可信上游启用,并确保该请求头不会被写入访问日志或回显给客户端。
set_refresh_token_header
如果为 true 且从身份提供商获取的刷新 Token 可用,则在
X-Refresh-Token请求头中设置该值。网关会先清除客户端提供的同名值。session
当
bearer_only为false且插件使用授权码流程时使用的会话配置。secret
有效值:
至少 16 个字符
当
bearer_only为false时,用于会话加密和 HMAC 操作的密钥。当
bearer_only为false时,此字段为必填项。该要求自 API7 企业版 3.9.2 和 APISIX 3.14.0 起生效。API7 网关使用 AES 对该值进行静态加密;当启用
apisix.data_encryption.enable_encrypt_fields时,APISIX 会在写入 etcd 前对其加密。cookie_name
会话 Cookie 的名称。对应 lua-resty-session 的
cookie_name选项。自 API7 企业版 3.9.14 和 APISIX 3.17.0 起可用。
cookie_path
会话 Cookie 的路径范围。对应 lua-resty-session 的
cookie_path选项。自 API7 企业版 3.9.14 和 APISIX 3.17.0 起可用。
cookie_domain
会话 Cookie 的域范围。对应 lua-resty-session 的
cookie_domain选项。自 API7 企业版 3.9.14 和 APISIX 3.17.0 起可用。
cookie_secure
如果为 true,则在会话 Cookie 上设置
Secure属性。对应 lua-resty-session 的cookie_secure选项。自 API7 企业版 3.9.14 和 APISIX 3.17.0 起可用。
cookie_http_only
如果为 true,则在会话 Cookie 上设置
HttpOnly属性。对应 lua-resty-session 的cookie_http_only选项。自 API7 企业版 3.9.14 和 APISIX 3.17.0 起可用。
cookie_same_site
有效值:
Strict、Lax、None或Default会话 Cookie 的 SameSite 属性。对应 lua-resty-session 的
cookie_same_site选项。自 API7 企业版 3.9.14 和 APISIX 3.17.0 起可用。
idling_timeout
空闲超时时间(秒),超过该时间后空闲会话将被重新生成。对应 lua-resty-session 的
idling_timeout选项。自 API7 企业版 3.9.14 和 APISIX 3.17.0 起可用。
rolling_timeout
滚动超时时间(秒),超过该时间后会话将被续期。对应 lua-resty-session 的
rolling_timeout选项。自 API7 企业版 3.9.14 和 APISIX 3.17.0 起可用。
absolute_timeout
会话的绝对生命周期(秒),超过该时间后无论是否活跃,会话都会过期。对应 lua-resty-session 的
absolute_timeout选项。自 API7 企业版 3.9.14 和 APISIX 3.17.0 起可用。
cookie
Cookie 配置。已废弃,仅为与 lua-resty-session 3.x schema 向后兼容而保留。请改用扁平的
session.*选项,例如cookie_name和absolute_timeout。lifetime
Cookie 生命周期(秒)。已废弃。当未设置
absolute_timeout时,在运行时映射到absolute_timeout。
storage
有效值:
cookie或redis会话存储后端。当设置为
redis时,会话存储在 Redis 中而非 Cookie 中。自 API7 企业版 3.9.15 和 APISIX 3.16.0 起可用。
redis
Redis 连接配置。当
storage为redis时必填。自 API7 企业版 3.9.15 和 APISIX 3.16.0 起可用。
host
Redis 主机。
port
有效值:
大于或等于 1
Redis 端口。
username
Redis 用户名。
password
Redis 密码。该值在存储到 etcd 前会使用 AES 加密。
database
有效值:
大于或等于 0
Redis 数据库索引。
prefix
Redis 会话 key 的前缀。
ssl