参数
请参阅 插件通用配置 了解所有插件可用的配置选项。
该插件支持使用 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
授权所需的范围。如果缺少任一必需范围,插件将以
403 Forbidden拒绝请求。使用 Bearer 令牌内省时,范围从内省响应中读取。在 APISIX 3.18.0 中,授权码会话也会接受检查:范围先从访问令牌读取,再从 ID 令牌读取;如果无法确定会话获授的范围,则拒绝该会话。API7 企业版 3.9.18 和 3.10.5 仅在 Bearer 令牌内省时强制执行此字段。
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 3.18.0 中,如果发现服务不可用,Bearer JWT 验证会以关闭方式失败,因为无法确定受信任的颁发者。API7 企业版 3.9.18 和 3.10.5 在该失败场景下会跳过颁发者验证,除非显式配置了
valid_issuers。
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 的令牌。API7 企业版 3.9.18 和 3.10.5 仅在该 Claim 存在时进行匹配;如需拒绝缺少 Claim 的令牌,请同时将
required设置为true。此要求在 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为/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 提供商用于内省访问令牌的令牌内省端点 URL。如果未设置,则使用 well-known 发现文档中提供的内省端点作为后备。
introspection_endpoint_auth_method
令牌内省端点的身份认证方法。该值应为 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
令牌端点的身份认证方法。该值应为 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 的私钥。当令牌、内省或 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
令牌、内省或 PAR 端点使用
private_key_jwt或client_secret_jwt时,客户端断言 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请求头中设置经过 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 且从身份提供商获取的刷新令牌可用,则在
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
如果为 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
如果 ID 令牌使用了网关不支持的预期签名算法,设置为 true 会在不验证签名的情况下继续;设置为 false 会拒绝该令牌。
对于安全敏感的部署,请将其设置为 false,除非你明确接受 ID 令牌签名未验证的风险。设置为 false 不会增 加对其他签名算法的支持。
在 APISIX 3.18.0 以及 API7 网关 3.9.18 和 3.10.5 中,ID 令牌验证路径支持
RS256、RS512、HS256和HS512,不验证PS*、ES*或EdDSA签名。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重定向用户代理,因此这些参数不会经过浏览器。请通过此嵌套对象配置 PAR。插件会拒绝扁平选项
use_par、pushed_authorization_request_endpoint和pushed_authorization_request_endpoint_auth_method,以便验证端点和身份认证方法。自 API7 企业版 3.9.18 和 3.10.5 以及 APISIX 3.18.0 起可用。
enabled
如果为 true,则把授权请求推送到 PAR 端点,而不是在重定向到授权端点时携带其参数。
endpoint
身份提供商 PAR 端点的 URL。未设置时使用其发现文档中声明的端点。
endpoint_auth_method
有效值:
client_secret_basic、client_secret_post、client_secret_jwt或private_key_jwtPAR 端点使用的客户端身份认证方法。未设置时沿用令牌端点配置的方法。
private_key_jwt需要client_rsa_private_key,client_secret_jwt需要client_secret。如果所选方法无法使用,PAR 请求将失败。
dpop
发送方约束令牌(DPoP)配置,定义见 RFC 9449。网关会为每次令牌请求签发 proof JWT,把签发的令牌绑定到所配置的密钥上,令牌即使被窃取也无法由其它客户端重放。同时设置
par.enabled时,密钥指纹会以dpop_jkt随推送请求一并发送。网关充当向身份提供商发起令牌请求和用户信息请求的 DPoP 客户端。此配置不会验证外部 API 客户端入站请求中的 DPoP 证明。
如果令牌响应的
token_type不是DPoP,网关会拒绝该响应。令牌请求收到携带DPoP-Nonce请求头的400或401响应时会重试一次;用户信息请求收到携带该请求头的401响应时也会重试一次。请通过此嵌套对象配置 DPoP。插件会拒绝扁平选项
use_dpop、dpop_signing_alg、dpop_private_key和dpop_public_jwk,以便应用 DPoP 验证和加密字段处理。自 API7 企业版 3.9.18 和 3.10.5 以及 APISIX 3.18.0 起可用。
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 的算法。该算法必须与所配置密钥的类型匹配;如果发现文档列出了支持的 DPoP 算法,还必须是身份提供商接受的算法。
client_jwt_assertion_alg
有效值:
HS256、HS512、RS256、RS512、ES256或ES512当端点认证方法为
client_secret_jwt或private_key_jwt时,用于签名客户端断言 JWT 的算法。client_secret_jwt应使用HS*算法,private_key_jwt应使用RS*或ES*算法。算法必须与client_rsa_private_key匹配;如果发现文档列出了支持的客户端断言算法,还必须是身份提供商接受的算法。所有端点共用一个配置的算法。自 API7 企业版 3.9.18 和 3.10.5 以及 APISIX 3.18.0 起可用。
client_jwt_assertion_audience
客户端断言 JWT 的 audience Claim。未设置时使用正在调用的端点 URL。当网关访问的是内部端点 URL,而身份提供商要求 audience 使用其外部 URL 时,请配置此字段。
自 API7 企业版 3.9.18 和 3.10.5 以及 APISIX 3.18.0 起可用。