跳到主要内容

参数

请参阅 插件通用配置 了解所有插件可用的配置选项。

该插件支持使用 env:// 前缀引用环境变量中的敏感参数值,或使用 secret:// 前缀引用 Secret 管理器(如 HashiCorp Vault 的 KV 密钥引擎)中的值。更多信息,请参阅环境变量中的插件密钥

  • client_id

    string

    必填


    客户端 ID。

  • client_secret

    string


    客户端密钥。该值在存储到 etcd 之前会使用 AES 加密。

    自 API7 企业版 3.9.14 和 APISIX 3.17.0 起,对于不与 OpenID 提供商通信的本地 JWT 验证模式(例如将 bearer_onlypublic_keyuse_jwks 组合使用),客户端密钥是可选的。使用 private_key_jwt 进行客户端身份认证,或授权码流程使用 PKCE 时,客户端密钥也是可选的。对于使用客户端密钥向提供商进行身份认证的流程(例如令牌内省或不使用 PKCE 的授权码流程),客户端密钥仍为必填项。

  • discovery

    string

    必填


    OpenID 提供商的 well-known 发现文档的 URL,其中包含 OP API 端点 列表。插件可以直接使用发现文档中的端点。你也可以单独配置这些端点,这将优先于发现文档中提供的端点。

  • scope

    string

    默认值:openid


    对应于应返回的有关已认证用户信息的 OIDC 范围,也称为 claims。这用于通过适当的权限对用户进行授权。默认值为 openid,这是 OIDC 返回唯一标识已认证用户的 sub claim 所需的范围。

    其他范围可以追加并用空格分隔,例如 openid email profile

  • required_scopes

    array[string]


    授权所需的范围。如果缺少任一必需范围,插件将以 403 Forbidden 拒绝请求。

    使用 Bearer 令牌内省时,范围从内省响应中读取。在 APISIX 3.18.0 中,授权码会话也会接受检查:范围先从访问令牌读取,再从 ID 令牌读取;如果无法确定会话获授的范围,则拒绝该会话。API7 企业版 3.9.18 和 3.10.5 仅在 Bearer 令牌内省时强制执行此字段。

  • realm

    string

    默认值:apisix


    因身份认证失败而返回 401 Unauthorized 响应时,WWW-Authenticate 响应头中的 Realm。例如:

    • 如果 realm 设置为 apisix-oidc,401 响应将包含以下响应头:

      WWW-Authenticate: Bearer realm="apisix-oidc"
      
    • 如果未配置 realm,401 响应将包含以下响应头:

      WWW-Authenticate: Bearer realm="apisix"
      
  • claim_validator

    object


    JWT Claim 验证配置。

    • issuer

      object


      Claim 颁发者验证配置。

      • valid_issuers

        array[string]


        受信任的 JWT 颁发者数组。如果未配置,则使用发现文档中的颁发者。在 APISIX 3.18.0 中,如果发现服务不可用,Bearer JWT 验证会以关闭方式失败,因为无法确定受信任的颁发者。API7 企业版 3.9.18 和 3.10.5 在该失败场景下会跳过颁发者验证,除非显式配置了 valid_issuers

    • audience

      object


      受众 Claim 验证配置。

      • claim

        string

        默认值:aud


        包含受众的 Claim 名称。

      • required

        boolean

        默认值:false


        如果为 true,则受众 Claim 是必需的,且 Claim 名称将是在 claim 中定义的名称。 例如,假设 claim_validator 配置如下: json { "audience": { "claim": "custom_claim", "required": true } } 如果请求中不存在 Claim custom_claim,你将收到 required audience claim not present 错误。

      • match_with_client_id

        boolean

        默认值:false


        如果为 true,则要求受众与客户端 ID 匹配。如果受众是字符串,则必须与客户端 ID 完全匹配;如果受众是字符串数组,则必须至少有一个值匹配。在 APISIX 3.18.0 中,此选项也会拒绝缺少受众 Claim 的令牌。API7 企业版 3.9.18 和 3.10.5 仅在该 Claim 存在时进行匹配;如需拒绝缺少 Claim 的令牌,请同时将 required 设置为 true

        此要求在 OpenID Connect 规范 中说明,以确保令牌是针对特定客户端的。

  • claim_schema

    object


    用于验证 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

    boolean

    默认值:false


    如果为 true,则严格要求请求中包含 Bearer 访问令牌以进行身份认证。

  • logout_path

    string

    默认值:/logout


    激活注销的路径。

  • post_logout_redirect_uri

    string


    logout_path 收到注销请求后将用户重定向到的 URL。

  • redirect_uri

    string

    默认值:`${ngx.var.request_uri}/.apisix/redirect`


    与 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

    integer

    默认值:3

    有效值:

    大于 0


    请求超时时间(秒)。

  • ssl_verify

    boolean

    默认值:true


    如果为 true,则验证 OpenID 提供商的 SSL 证书。

    自 APISIX 3.16.0 和 API7 企业版 3.9.8 起,默认值由 false 更改为 true。这是一个不兼容变更。

  • introspection_endpoint

    string


    OpenID 提供商用于内省访问令牌的令牌内省端点 URL。如果未设置,则使用 well-known 发现文档中提供的内省端点作为后备。

  • introspection_endpoint_auth_method

    string

    默认值:client_secret_basic


    令牌内省端点的身份认证方法。该值应为 well-known 发现文档中 introspection_endpoint_auth_methods_supported 授权服务器元数据指定的身份认证方法之一,例如 client_secret_basicclient_secret_postprivate_key_jwtclient_secret_jwt

    使用默认的 client_secret_basic 时,客户端凭据仅通过 Authorization 请求头发送。如果身份提供商要求在内省请求体中接收凭据,请将此字段设置为 client_secret_post

  • token_endpoint_auth_method

    string

    默认值:client_secret_basic


    令牌端点的身份认证方法。该值应为 well-known 发现文档中 token_endpoint_auth_methods_supported 授权服务器元数据 指定的身份认证方法之一,例如 client_secret_basicclient_secret_postprivate_key_jwtclient_secret_jwt

    如果插件不支持配置的方法,则忽略该配置,并使用 OpenID 提供商公布的第一个可用方法。如果插件支持配置的方法,但 token_endpoint_auth_methods_supported 已提供且不包含该方法,则令牌端点身份认证失败。

  • client_rsa_private_key

    string


    用于签署客户端断言 JWT 的私钥。当令牌、内省或 PAR 端点选择 private_key_jwt 时必填。密钥类型必须与 client_jwt_assertion_alg 匹配:RS* 使用 RSA 密钥,ES* 使用对应曲线上的 EC 密钥。

    该值在存储到 etcd 前会使用 AES 加密。

  • client_rsa_private_key_id

    string


    端点选择 private_key_jwt 时,签名客户端断言 JWT 中使用的可选密钥 ID。

  • client_jwt_assertion_expires_in

    integer

    默认值:60


    令牌、内省或 PAR 端点使用 private_key_jwtclient_secret_jwt 时,客户端断言 JWT 的生命周期(秒)。

  • public_key

    string


    如果使用非对称算法,则用于验证 JWT 签名的公钥。提供此值以执行令牌验证将跳过客户端凭据流程中的令牌内省。

    你可以使用 -----BEGIN PUBLIC KEY----- …… -----END PUBLIC KEY----- 格式传递公钥。

  • token_signing_alg_values_expected

    string


    用于签署 JWT 的算法,例如 RS256

  • set_access_token_header

    boolean

    默认值:true


    如果为 true,则在请求头中设置已认证请求所使用的访问令牌。默认使用 X-Access-Token 请求头。网关会先清除客户端提供的同名值,再设置该令牌。

  • access_token_in_authorization_header

    boolean

    默认值:false


    如果为 trueset_access_token_header 也为 true,则在 Authorization 请求头中设置访问令牌。

  • accept_none_alg

    boolean

    默认值:false


    如果 OpenID 提供商不对其 ID 令牌进行签名(例如当签名算法设置为 none 时),则设置为 true。

  • use_jwks

    boolean

    默认值:false


    如果为 true 且未设置 public_key,则使用 JWKS 验证 JWT 签名并跳过客户端凭据流程中的令牌内省。JWKS 端点从发现文档中解析。

  • jwk_expires_in

    integer

    默认值:86400


    JWK 缓存的过期时间(秒)。

  • jwt_verification_cache_ignore

    boolean

    默认值:false


    如果为 true,则强制重新验证 Bearer 令牌并忽略任何现有的缓存验证结果。

  • cache_segment

    string


    缓存段的可选名称,用于分隔和区分令牌内省或 JWT 验证使用的缓存。

  • use_pkce

    boolean

    默认值:false


    如果为 true,则对授权码流程使用用于代码交换的证明密钥 (PKCE),如 RFC 7636 中所定义。

  • set_id_token_header

    boolean

    默认值:true


    如果为 true 且经过验证的 ID 令牌可用,则在 X-ID-Token 请求头中设置经过 Base64 编码的解码后 Claim。该值不是签名 JWT,无法使用身份提供商的 JWKS 进行验证。网关会先清除客户端提供的同名值。

  • set_userinfo_header

    boolean

    默认值:true


    如果为 true 且用户信息数据可用,则在 X-Userinfo 请求头中设置该值。网关会先清除客户端提供的同名值。

  • set_raw_id_token_header

    boolean

    默认值:false


    如果为 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

    boolean

    默认值:false


    如果为 true 且从身份提供商获取的刷新令牌可用,则在 X-Refresh-Token 请求头中设置该值。网关会先清除客户端提供的同名值。

  • session

    object


    bearer_onlyfalse 且插件使用授权码流程时使用的会话配置。

    • secret

      string

      有效值:

      至少 16 个字符


      bearer_onlyfalse 时,用于会话加密和 HMAC 操作的密钥。

      bearer_onlyfalse 时,此字段为必填项。该要求自 API7 企业版 3.9.2 和 APISIX 3.14.0 起生效。

      API7 网关使用 AES 对该值进行静态加密;当启用 apisix.data_encryption.enable_encrypt_fields 时,APISIX 会在写入 etcd 前对其加密。

    • cookie_name

      string


      会话 Cookie 的名称。对应 lua-resty-session 的 cookie_name 选项。

      自 API7 企业版 3.9.14 和 APISIX 3.17.0 起可用。

    • cookie_path

      string


      会话 Cookie 的路径范围。对应 lua-resty-session 的 cookie_path 选项。

      自 API7 企业版 3.9.14 和 APISIX 3.17.0 起可用。

    • cookie_domain

      string


      会话 Cookie 的域范围。对应 lua-resty-session 的 cookie_domain 选项。

      自 API7 企业版 3.9.14 和 APISIX 3.17.0 起可用。

    • cookie_secure

      boolean


      如果为 true,则在会话 Cookie 上设置 Secure 属性。对应 lua-resty-session 的 cookie_secure 选项。

      自 API7 企业版 3.9.14 和 APISIX 3.17.0 起可用。

    • cookie_http_only

      boolean


      如果为 true,则在会话 Cookie 上设置 HttpOnly 属性。对应 lua-resty-session 的 cookie_http_only 选项。

      自 API7 企业版 3.9.14 和 APISIX 3.17.0 起可用。

    • cookie_same_site

      string

      有效值:

      StrictLaxNoneDefault


      会话 Cookie 的 SameSite 属性。对应 lua-resty-session 的 cookie_same_site 选项。

      自 API7 企业版 3.9.14 和 APISIX 3.17.0 起可用。

    • idling_timeout

      integer


      空闲超时时间(秒),超过该时间后空闲会话将被重新生成。对应 lua-resty-session 的 idling_timeout 选项。

      自 API7 企业版 3.9.14 和 APISIX 3.17.0 起可用。

    • rolling_timeout

      integer


      滚动超时时间(秒),超过该时间后会话将被续期。对应 lua-resty-session 的 rolling_timeout 选项。

      自 API7 企业版 3.9.14 和 APISIX 3.17.0 起可用。

    • absolute_timeout

      integer


      会话的绝对生命周期(秒),超过该时间后无论是否活跃,会话都会过期。对应 lua-resty-session 的 absolute_timeout 选项。

      自 API7 企业版 3.9.14 和 APISIX 3.17.0 起可用。

    • cookie

      object


      Cookie 配置。已废弃,仅为与 lua-resty-session 3.x schema 向后兼容而保留。请改用扁平的 session.* 选项,例如 cookie_nameabsolute_timeout

      • lifetime

        integer

        默认值:3600


        Cookie 生命周期(秒)。已废弃。当未设置 absolute_timeout 时,在运行时映射到 absolute_timeout

    • storage

      string

      默认值:cookie

      有效值:

      cookieredis


      会话存储后端。当设置为 redis 时,会话存储在 Redis 中而非 Cookie 中。

      自 API7 企业版 3.9.15 和 APISIX 3.16.0 起可用。

    • redis

      object


      Redis 连接配置。当 storageredis 时必填。

      自 API7 企业版 3.9.15 和 APISIX 3.16.0 起可用。

      • host

        string

        默认值:127.0.0.1


        Redis 主机。

      • port

        integer

        默认值:6379

        有效值:

        大于或等于 1


        Redis 端口。

      • username

        string


        Redis 用户名。

      • password

        string


        Redis 密码。该值在存储到 etcd 前会使用 AES 加密。

      • database

        integer

        默认值:0

        有效值:

        大于或等于 0


        Redis 数据库索引。

      • prefix

        string

        默认值:sessions


        Redis 会话 key 的前缀。

      • ssl

        boolean

        默认值:false


        如果为 true,则使用 SSL 连接 Redis。

      • ssl_verify

        boolean

        默认值:true


        如果为 true,则校验 Redis 服务器的 SSL 证书。

      • server_name

        string


        连接 Redis 时用于 TLS SNI 的服务器名称。

      • connect_timeout

        integer

        默认值:1000

        有效值:

        大于或等于 1


        Redis 连接超时时间(毫秒)。

      • send_timeout

        integer

        默认值:1000

        有效值:

        大于或等于 1


        Redis 发送超时时间(毫秒)。

      • read_timeout

        integer

        默认值:1000

        有效值:

        大于或等于 1


        Redis 读取超时时间(毫秒)。

      • keepalive_timeout

        integer

        默认值:10000

        有效值:

        大于或等于 1000


        Redis keepalive 超时时间(毫秒)。

  • unauth_action

    string

    默认值:auth

    有效值:

    authdenypass


    未经身份认证的请求的操作。

    当设置为 auth 时,重定向到 OpenID 提供商的身份认证端点。

    当设置为 pass 时,允许请求通过而无需身份认证。

    当设置为 deny 时,返回 401 未经身份认证的响应,而不是启动授权码授予流程。

  • proxy_opts

    object


    OpenID 提供商所在的代理服务器的配置。

    • http_proxy

      string


      HTTP 请求的代理服务器地址,例如 http://<proxy_host>:<proxy_port>

    • https_proxy

      string


      HTTPS 请求的代理服务器地址,例如 http://<proxy_host>:<proxy_port>

    • http_proxy_authorization

      string


      用于 http_proxy 的默认 Proxy-Authorization 请求头值。可以使用自定义 Proxy-Authorization 请求头覆盖。

    • https_proxy_authorization

      string


      用于 https_proxy 的默认 Proxy-Authorization 请求头值。不能使用自定义 Proxy-Authorization 请求头覆盖,因为对于 HTTPS,授权在建立连接时完成。

    • no_proxy

      string


      不应被代理的主机的逗号分隔列表。

  • authorization_params

    object


    发送到授权端点的请求中的附加参数。

  • renew_access_token_on_expiry

    boolean

    默认值:true


    如果为 true,则在访问令牌过期或刷新令牌可用时尝试静默更新访问令牌。如果令牌更新失败,则重定向用户以重新进行身份认证。

  • access_token_expires_in

    integer

    默认值:3600


    如果令牌端点响应中不存在 expires_in 属性,则为访问令牌的生命周期(秒)。

  • refresh_session_interval

    integer


    无需重新身份认证即可刷新用户 ID 令牌的时间间隔。在 APISIX 中,未设置时插件不会尝试静默更新。

    在 API7 Gateway 中,默认值为 900

  • iat_slack

    integer

    默认值:120


    ID 令牌中 iat Claim 的时钟偏差容差(秒)。

  • introspection_expiry_claim

    string

    默认值:exp


    过期时间 Claim 的名称,用于控制缓存和内省的访问令牌的 TTL。

  • introspection_interval

    integer


    缓存和内省的访问令牌的 TTL(秒)。

    默认值为 0,表示不使用此选项,插件默认使用由 introspection_expiry_claim 中定义的过期时间 Claim 传递的 TTL。

    如果 introspection_interval 大于 0 且小于由 introspection_expiry_claim 中定义的过期时间 Claim 传递的 TTL,则使用 introspection_interval

  • introspection_addon_headers

    array[string]


    用于向内省 HTTP 请求附加额外的请求头值。如果原始请求中不存在指定的请求头,则不会附加该值。

  • accept_unsupported_alg

    boolean

    默认值:true


    如果 ID 令牌使用了网关不支持的预期签名算法,设置为 true 会在不验证签名的情况下继续;设置为 false 会拒绝该令牌。

    对于安全敏感的部署,请将其设置为 false,除非你明确接受 ID 令牌签名未验证的风险。设置为 false 不会增加对其他签名算法的支持。

    在 APISIX 3.18.0 以及 API7 网关 3.9.18 和 3.10.5 中,ID 令牌验证路径支持 RS256RS512HS256HS512,不验证 PS*ES*EdDSA 签名。

  • access_token_expires_leeway

    integer


    访问令牌更新的过期回旋余地(秒)。当设置为大于 0 的值时,令牌更新将在令牌过期前的设定时间进行。这避免了在到达资源服务器时访问令牌刚好过期的情况。

  • force_reauthorize

    boolean

    默认值:false


    如果为 true,即使已缓存令牌,也执行授权流程。

  • use_nonce

    boolean

    默认值:false


    如果为 true,则在授权请求中启用 nonce 参数。

  • revoke_tokens_on_logout

    boolean

    默认值:false


    如果为 true,则在撤销端点通知授权服务器不再需要先前获取的刷新或访问令牌。

  • session_contents

    object


    应存储在会话中的内容,用于最小化会话数据的大小。未设置时,所有内容都包含在会话中。

    • id_token

      boolean


      如果为 true,则在会话中存储 ID 令牌。

    • access_token

      boolean


      如果为 true,则在会话中存储访问令牌和刷新令牌。

    • enc_id_token

      boolean


      如果为 true,则在会话中存储加密的 ID 令牌。

    • user

      boolean


      如果为 true,则在会话中存储用户信息。

  • par

    object


    推送式授权请求(PAR)配置,定义见 RFC 9126。启用 PAR 后,网关通过后通道把授权请求参数发送给身份提供商,并只用返回的 request_uri 重定向用户代理,因此这些参数不会经过浏览器。

    请通过此嵌套对象配置 PAR。插件会拒绝扁平选项 use_parpushed_authorization_request_endpointpushed_authorization_request_endpoint_auth_method,以便验证端点和身份认证方法。

    自 API7 企业版 3.9.18 和 3.10.5 以及 APISIX 3.18.0 起可用。

    • enabled

      boolean

      默认值:false


      如果为 true,则把授权请求推送到 PAR 端点,而不是在重定向到授权端点时携带其参数。

    • endpoint

      string


      身份提供商 PAR 端点的 URL。未设置时使用其发现文档中声明的端点。

    • endpoint_auth_method

      string

      有效值:

      client_secret_basicclient_secret_postclient_secret_jwtprivate_key_jwt


      PAR 端点使用的客户端身份认证方法。未设置时沿用令牌端点配置的方法。private_key_jwt 需要 client_rsa_private_keyclient_secret_jwt 需要 client_secret。如果所选方法无法使用,PAR 请求将失败。

  • dpop

    object


    发送方约束令牌(DPoP)配置,定义见 RFC 9449。网关会为每次令牌请求签发 proof JWT,把签发的令牌绑定到所配置的密钥上,令牌即使被窃取也无法由其它客户端重放。同时设置 par.enabled 时,密钥指纹会以 dpop_jkt 随推送请求一并发送。

    网关充当向身份提供商发起令牌请求和用户信息请求的 DPoP 客户端。此配置不会验证外部 API 客户端入站请求中的 DPoP 证明。

    如果令牌响应的 token_type 不是 DPoP,网关会拒绝该响应。令牌请求收到携带 DPoP-Nonce 请求头的 400401 响应时会重试一次;用户信息请求收到携带该请求头的 401 响应时也会重试一次。

    请通过此嵌套对象配置 DPoP。插件会拒绝扁平选项 use_dpopdpop_signing_algdpop_private_keydpop_public_jwk,以便应用 DPoP 验证和加密字段处理。

    自 API7 企业版 3.9.18 和 3.10.5 以及 APISIX 3.18.0 起可用。

    • enabled

      boolean

      默认值:false


      如果为 true,则在令牌请求中携带 DPoP proof JWT。启用时 private_keypublic_jwk 均为必填。

    • private_key

      string


      用于签名 DPoP proof JWT 的 PEM 格式私钥。启用数据面数据加密时,该字段会落盘加密。

    • public_jwk

      object


      private_key 匹配的公开 JWK,会嵌入 proof JWT 的头部。其中不得包含私钥参数。

    • signing_alg

      string

      默认值:ES256

      有效值:

      ES256RS256PS256


      用于签署 DPoP proof JWT 的算法。该算法必须与所配置密钥的类型匹配;如果发现文档列出了支持的 DPoP 算法,还必须是身份提供商接受的算法。

  • client_jwt_assertion_alg

    string

    有效值:

    HS256HS512RS256RS512ES256ES512


    当端点认证方法为 client_secret_jwtprivate_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

    string


    客户端断言 JWT 的 audience Claim。未设置时使用正在调用的端点 URL。当网关访问的是内部端点 URL,而身份提供商要求 audience 使用其外部 URL 时,请配置此字段。

    自 API7 企业版 3.9.18 和 3.10.5 以及 APISIX 3.18.0 起可用。