Kong网关配置:如何根据SSL_CLIENT_CERT请求头条件化应用OIDC插件
Kong条件化启用OIDC插件的解决方案
完全可以实现你想要的场景!Kong从2.x版本开始支持条件式插件执行,通过在插件配置中添加if字段,基于请求属性判断是否启用该插件。针对你的需求,只需要给OIDC插件添加一个判断条件即可。
下面是修改后的完整声明式配置:
_format_version: "2.1" _transform: true services: - name: core host: core-service port: 8080 protocol: http routes: - name: core_route strip_path: false paths: - /api* plugins: - name: request-transformer config: rename: headers: - SSL_CLIENT_CERT:CERTIFICATE - name: oidc if: "!headers['SSL_CLIENT_CERT']" # 关键条件:仅当该请求头不存在时执行OIDC插件 config: # 你的OIDC配置参数保持不变 client_id: your-client-id client_secret: your-client-secret discovery: https://your-oidc-provider/.well-known/openid-configuration # ... 其他OIDC配置
关键配置说明:
if: "!headers['SSL_CLIENT_CERT']":这个表达式的作用是仅当请求中不存在SSL_CLIENT_CERT请求头时,才触发OIDC插件的执行。其中:headers['SSL_CLIENT_CERT']用于检查请求中是否包含指定的请求头;!符号表示逻辑否定,也就是当该头不存在时条件成立。
request-transformer插件不需要添加条件,因为无论请求是否携带SSL_CLIENT_CERT头,你都需要将其重命名为CERTIFICATE并转发到上游,所以保持全局执行即可。
测试验证方法:
- 不带SSL_CLIENT_CERT头的请求:Kong会触发OIDC插件进行认证,认证通过后再转发请求到上游。
- 携带SSL_CLIENT_CERT头的请求:Kong会跳过OIDC插件,直接执行request-transformer并重命名头,然后转发请求到上游应用。
这种方式完全符合你的需求,而且是Kong原生支持的功能,不需要额外开发自定义插件。
内容的提问来源于stack exchange,提问作者user1563721
相关产品推荐
相关产品推荐

