参数
请参阅 插件通用配置 了解所有插件可用的配置选项。
该插件支持使用 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 时,客户端密钥也是可选的。对于使用客户端密钥向提供商进行身份认证的流程(例如令牌内省或不使用 PKCE 的授权码流程),客户端密钥仍为必填项。discovery
OpenID 提供商的 well-known 发现文档的 URL,其中包含 OP API 端点 列表。插件可以直接使用发现文档中的端点。你也可以单独配置这些端点,这将优先于发现文档中提供的端点。
scope
对应于应返回的有关已认证用户信息的 OIDC 范围,也称为 claims。这用于通过适当的权限对用户进行授权。默认值为
openid,这是 OIDC 返回唯一标识已认证用户的subclaim 所需的范围。其他范围可以追加并用空格分隔,例如
openid email profile。required_scopes
访问令牌中必须存在的范围。当
bearer_only为true时,与内省端点结合使用。如果缺少任何必需的范围,插件将以 403 Forbidden 错误拒绝请求。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 颁发者数组。如果未配置,将使用发现端点返回的颁发者。如果两者都不可用,则不会验证颁发者。
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 完全匹配。如果受众是字符串数组,则必须至少有一个值与客户端 ID 匹配。如果没有找到匹配项,你将收到
mismatched audience错误。此要求在 OpenID Connect 规范 中说明,以确保令牌是针对特定客户端的。
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 访问令牌以进行身份认证。
logout_path
激活注销的路径。
post_logout_redirect_uri
logout_path收到注销请求后将用户重定向到的 URL。redirect_uri
与 OpenID 提供商认证后重定向到的 URI。
请注意,重定向 URI 不应与请求 URI 相同,而应是请求 URI 的子路径。例如,如果路由的
uri为/api/v1/*,则redirect_uri可以 配置为/api/v1/redirect。如果未配置
redirect_uri,APISIX 将把/.apisix/redirect附加到请求 URI 以确定redirect_uri的值。timeout
有效值:
大于 0
请求超时时间(秒)。
ssl_verify
如果为
true,则验证 OpenID 提供商的 SSL 证书。自 APISIX 3.16.0 和 API7 企业版 3.9.8 起,默认值由
false更改为true。这是一个不兼容变更。introspection_endpoint_auth_method
令牌内省端点的身份认证方法。该值应为 well-known 发现文档中
introspection_endpoint_auth_methods_supported授权服务器元数据 指定的身份认证方法之一,例如client_secret_basic、client_secret_post、private_key_jwt和client_secret_jwt。token_endpoint_auth_method
令牌端点的身份认证方法。该值应为 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已提供且不包含该方法,则令牌端点身份认证失败。client_rsa_private_key
用于签署 JWT 以对 OP 进行身份认证的客户端 RSA 私钥。当
token_endpoint_auth_method为private_key_jwt时必填。该值在存储到 etcd 前会使用 AES 加密。
client_rsa_private_key_id
用于计算签名 JWT 的客户端 RSA 私钥 ID。当
token_endpoint_auth_method为private_key_jwt时可选。client_jwt_assertion_expires_in
用于对 OP 进行身份认证的签名 JWT 的生命周期(秒)。当
token_endpoint_auth_method为private_key_jwt或client_secret_jwt时使用。public_key
如果使用非对称算法,则用于验证 JWT 签名的公钥。提供此值以执行令牌验证将跳过客户端凭据流程中的令牌内省。
你可以使用
-----BEGIN PUBLIC KEY----- …… -----END PUBLIC KEY-----格式传递公钥。token_signing_alg_values_expected
用于签署 JWT 的算法,例如
RS256。set_access_token_header
如果为
true,则在请求头中设置访问令牌。默认使用X-Access-Token请求头。access_token_in_authorization_header
如果为
true且set_access_token_header也为true,则在Authorization请求头中设置访问令牌。accept_none_alg
如果 OpenID 提供商不对其 ID 令牌进行签名(例如当签名算法设置为
none时),则设置为 true。use_jwks
如果为 true 且未设置
public_key,则使用 JWKS 验证 JWT 签名并跳过客户端凭据流程中的令牌内省。JWKS 端点从发现文档中解析。jwk_expires_in
JWK 缓存的过期时间(秒)。
jwt_verification_cache_ignore
如果为 true,则强制重新验证 Bearer 令牌并忽略任何现有的缓存验证结果。
cache_segment
缓存段的可选名称,用于分隔和区分令牌内省或 JWT 验证使用的缓存。
use_pkce
如果为 true,则对授权码流程使用用于代码交换的证明密钥 (PKCE),如 RFC 7636 中所定义。
set_id_token_header
如果为 true 且 ID 令牌可用,则在
X-ID-Token请求头中设置该值。set_userinfo_header
如果为 true 且用户信息数据可用,则在
X-Userinfo请求头中设置该值。set_raw_id_token_header
如果为 true,则把身份提供商签发的原始 ID Token JWT 通过
X-Raw-ID-Token请求头添加到请求中,便于上游服务自行校验 Token 签名。自 API7 企业版 3.9.x 系列的 3.9.17 版本起可用,3.10.x 系列自 3.10.4 版本起可用。原始 ID Token 属于 bearer 凭证。请仅对可信上游启用,并确保该请求头不会被写入访问日志或回显给客户端。
set_refresh_token_header
如果为 true 且刷新令牌可用,则在
X-Refresh-Token请求头中设置该值。session
当
bearer_only为false且插件使用授权码流程时使用的会话配置。secret
有效值:
至少 16 个字符
当
bearer_only为false时,用于会话加密和 HMAC 操作的密钥。从 APISIX 3.14.0 和 API7 企业版 3.9.2 开始,当
bearer_only为false时,会话密钥是必需的。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
如果为 true,则使用 SSL 连接 Redis。
ssl_verify
如果为 true,则校验 Redis 服务器的 SSL 证书。
server_name
连接 Redis 时用于 TLS SNI 的服务器名称。
connect_timeout
有效值:
大于或等于 1
Redis 连接超时时间(毫秒)。
send_timeout
有效值:
大于或等于 1
Redis 发送超时时间(毫秒)。
read_timeout
有效值:
大于或等于 1
Redis 读取超时时间(毫秒)。
keepalive_timeout
有效值:
大于或等于 1000
Redis keepalive 超时时间(毫秒)。
unauth_action
有效值:
auth、deny或pass未经身份认证的请求的操作。
当设置为
auth时,重定向到 OpenID 提供商的身份认证端点。当设置为
pass时,允许请求通过而无需身份认证。当设置为
deny时,返回 401 未经身份认证的响应,而不是启动授权码授予流程。proxy_opts
OpenID 提供商所在的代理服务器的配置。
http_proxy
HTTP 请求的代理服务器地址,例如
http://<proxy_host>:<proxy_port>。https_proxy
HTTPS 请求的代理服务器地址,例如
http://<proxy_host>:<proxy_port>。http_proxy_authorization
用于
http_proxy的默认Proxy-Authorization请求头值。可以使用自定义Proxy-Authorization请求头覆盖。https_proxy_authorization
用于
https_proxy的默认Proxy-Authorization请求头值。不能使用自定义Proxy-Authorization请求头覆盖,因为对于 HTTPS,授权在建立连接时完成。no_proxy
不应被代理的主机的逗号分隔列表。
authorization_params
发送到授权端点的请求中的附加参数。
renew_access_token_on_expiry
如果为 true,则在访问令牌过期或刷新令牌可用时尝试静默更新访问令牌。如果令牌更新失败,则重定向用户以重新进行身份认证。
access_token_expires_in
如果令牌端点响应中不存在
expires_in属性,则为访问令牌的生命周期(秒)。refresh_session_interval
无需重新身份认证即可刷新用户 ID 令牌的时间间隔。在 APISIX 中,未设置时插件不会尝试静默更新。
在 API7 Gateway 中,默认值为
900。iat_slack
ID 令牌中
iatClaim 的时钟偏差容差(秒)。introspection_expiry_claim
过期时间 Claim 的名称,用于控制缓存和内省的访问令牌的 TTL。
introspection_interval
缓存和内省的访问令牌的 TTL(秒)。
默认值为 0,表示不使用此选项,插件默认使用由
introspection_expiry_claim中定义的过期时间 Claim 传递的 TTL。如果
introspection_interval大于 0 且小于由introspection_expiry_claim中定义的过期时间 Claim 传递的 TTL,则使用introspection_interval。introspection_addon_headers
用于向内省 HTTP 请求附加额外的请求头值。如果原始请求中不存在指定的请求头,则不会附加该值。
accept_unsupported_alg
如果为 true,则忽略 ID 令牌签名以接受不受支持的签名算法。
access_token_expires_leeway
访问令牌更新的过期回旋余地(秒)。当设置为大于 0 的值时,令牌更新将在令牌过期前的设定时间进行。这避免了在到达资源服务器时访问令牌刚好过期的情况。
force_reauthorize
如果为 true,即使已缓存令牌,也执行授权流程。
use_nonce
如果为 true,则在授权请求中启用 nonce 参数。
revoke_tokens_on_logout
如果为 true,则在撤销端点通知授权服务器不再需要先前获取的刷新或访问令牌。
session_contents
应存储在会话中的内容,用于最小化会话数据的大小。未设置时,所有内容都包含在会话中。
id_token
如果为 true,则在会话中存储 ID 令牌。
access_token
如果为 true,则在会话中存储访问令牌和刷新令牌。
enc_id_token
如果为 true,则在会话中存储加密的 ID 令牌。
user
如果为 true,则在会话中存储用户信息。
par
推送式授权请求(PAR)配置,定义见 RFC 9126。启用 PAR 后,网关通过后通道把授权请求参数发送给身份提供商,并只用返回的
request_uri重定向用户代理,因此这些参数不会经过浏览器。自 API7 企业版 3.9.x 系列的 3.9.18 版本起可用,3.10.x 系列自 3.10.5 版本起可用。
enabled
如果为 true,则把授权请求推送到 PAR 端点,而不是在重定向到授权端点时携带其参数。
endpoint
身份提供商 PAR 端点的 URL。未设置时使用其发现文档中声明的端点。
endpoint_auth_method
有效值:
client_secret_basic、client_secret_post、client_secret_jwt或private_key_jwt在 PAR 端点上使用的客户端认证方法。未设置时沿用为令牌端点配置的方法。
dpop
发送方约束令牌(DPoP)配置,定义见 RFC 9449。网关会为每次令牌请求签发 proof JWT,把签发的令牌绑定到所配置的密钥上,令牌即使被窃取也无法由其它客户端重放。同时设置
par.enabled时,密钥指纹会以dpop_jkt随推送请求一并发送。自 API7 企业版 3.9.x 系列的 3.9.18 版本起 可用,3.10.x 系列自 3.10.5 版本起可用。
enabled
如果为 true,则在令牌请求中携带 DPoP proof JWT。启用时
private_key与public_jwk均为必填。private_key
用于签名 DPoP proof JWT 的 PEM 格式私钥。启用数据面数据加密时,该字段会落盘加密。
public_jwk
与
private_key匹配的公开 JWK,会嵌入 proof JWT 的头部。其中不得包含私钥参数。signing_alg
有效值:
ES256、RS256或PS256签名 DPoP proof JWT 所用的算法,需与所配置密钥的类型匹配。
client_jwt_assertion_alg
有效值:
HS256、HS512、RS256、RS512、ES256或ES512当端点认证方法为
client_secret_jwt或private_key_jwt时,用于签名客户端断言 JWT 的算法。自 API7 企业版 3.9.x 系列的 3.9.18 版本起可用,3.10.x 系列自 3.10.5 版本起可用。
client_jwt_assertion_audience
客户端断言 JWT 的 audience 声明。未设置时使用身份提供商的令牌端点。
自 API7 企业版 3.9.x 系列的 3.9.18 版本起可用,3.10.x 系列自 3.10.5 版本起可用。