如何配置APISIX OpenID-Connect插件同时支持PKCE与客户端密钥流?
APISIX OpenID-Connect 同时支持PKCE与常规授权码流的配置方法
APISIX的OpenID-Connect插件支持让客户端自主选择使用PKCE流或常规授权码流,无需在服务端强制二选一,具体配置和逻辑如下:
核心配置逻辑
将插件的use_pkce参数设置为true即可,这个配置的作用是允许客户端使用PKCE,而非强制所有客户端必须使用。插件会根据客户端请求中的参数自动适配对应的流程:
- 当原生应用发起授权请求时,只要带上
code_challenge和code_challenge_method参数,插件就会触发PKCE验证流程,后续令牌交换阶段需要客户端提供code_verifier; - 当Web应用(持有客户端密钥)发起授权请求时,无需携带PKCE相关参数,插件会自动走常规授权码流,在令牌交换阶段验证客户端ID与密钥。
具体配置示例
{ "plugins": { "openid-connect": { "client_id": "your-shared-client-id", "client_secret": "your-web-app-secret", "use_pkce": true, "discovery": "https://your-identity-provider/.well-known/openid-configuration", "redirect_uri": "https://your-apisix-endpoint/callback" } } }
注意事项
- 确保你的APISIX版本在2.10及以上,该版本才引入了客户端自主选择PKCE的支持;
- Web应用类型的客户端必须配置
client_secret,原生应用可以不设置该字段(或留空); - 令牌交换阶段,原生应用需携带
code_verifier参数,Web应用则携带client_secret完成身份验证。
内容的提问来源于stack exchange,提问作者Vish
相关产品推荐
相关产品推荐

