如何让Envoy Gateway同时支持OIDC认证与Bearer Token验证?
解决Envoy Gateway同时支持OIDC重定向与JWT Bearer Token认证的方案
你的核心问题是当前SecurityPolicy同时启用OIDC和JWT时,默认要求两种认证都通过,导致带有效Bearer Token的请求因缺少OIDC会话Cookie被强制重定向。要实现「无Token时走OIDC重定向,有有效Bearer Token时直接验证放行」的效果,需要调整认证策略的组合逻辑,让两种认证方式满足任一即可通过。
修改后的配置示例
apiVersion: gateway.envoyproxy.io/v1alpha1 kind: SecurityPolicy metadata: name: authpolicy spec: targetRefs: - group: gateway.networking.k8s.io kind: HTTPRoute name: foo auth: # 配置两个独立认证提供者:JWT Token验证、OIDC重定向登录 providers: - name: jwt-bearer-auth jwt: providers: - name: example remoteJWKS: uri: https://... # 明确指定从Authorization头提取Bearer Token fromHeaders: - name: Authorization prefix: "Bearer " - name: oidc-redirect-auth oidc: provider: issuer: "https://..." clientID: "..." clientSecret: name: "envoygw-oidc-clientsecret" forwardAccessToken: true refreshToken: true # 设置认证组合模式为ANY:任一认证通过即可放行 combine: mode: ANY
关键配置说明
- 用
auth.providers包裹两种认证方式:将JWT和OIDC作为独立的认证提供者,替代原来平级配置的方式,避免默认的「同时满足」逻辑冲突。 combine.mode: ANY:告诉Envoy Gateway,只要请求通过其中一种认证即可放行,无需同时满足两种要求。- JWT的
fromHeaders配置:明确指定从Authorization头提取Bearer Token,确保JWT验证逻辑能正确识别应用发送的Token格式。
验证逻辑
- 浏览器无认证访问:JWT验证失败,自动触发OIDC重定向流程,完成登录后通过OIDC认证放行。
- 应用携带有效Bearer Token访问:JWT验证通过,直接放行,不会触发OIDC重定向。
内容的提问来源于stack exchange,提问作者Radek 'Goblin' Pieczonka
相关产品推荐
相关产品推荐

