我有一个应用程序想要放在 Envoy Gateway 后面。该应用程序需要在 API 网关级别使用 OIDC 进行保护。像这样的基本设置可以轻松实现,我现在有一个配置了 oidc 的应用程序,因此每当我尝试在没有正确身份验证的情况下访问它时,我都会被重定向到 IdP,并且可以在提供凭据并通过重定向后进入。
问题是我还有一个应用程序自行从 IdP 接收不记名令牌。当我尝试使用该不记名令牌访问 API 时,请求仍会重定向到 IdP 进行身份验证,同时它们携带有效的不记名令牌。
我找不到一种方法来告诉 OIDC 尊重该不记名令牌并验证它,当我从 IdP 切换到使用 JWKS 的 JWT 身份验证时,我可以使用不记名令牌进入,但显然我的其他请求不会被重定向如果未正确验证,则发送给 IdP。
关于如何使用 Envoy Gateway 实现这两个目标有任何提示吗?
我正在尝试的示例配置:
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: SecurityPolicy
metadata:
name: authpolicy
spec:
targetRefs:
- group: gateway.networking.k8s.io
kind: HTTPRoute
name: foo
oidc:
provider:
issuer: "https://..."
clientID: "..."
clientSecret:
name: "envoygw-oidc-clientsecret"
forwardAccessToken: true
refreshToken: true
jwt:
providers:
- name: example
remoteJWKS:
uri: https://...
最终我发现创建两个
HTTPRoute
对象并向 JWT 安全路由添加如下所示的附加匹配器就可以解决问题。
- headers:
- name: Authorization
type: RegularExpression
value: Bearer .*
path:
type: PathPrefix
value: /foo