带有 OIDC 和直接不记名代币的 Envoy 网关

问题描述 投票:0回答:1

我有一个应用程序想要放在 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://...

kubernetes envoyproxy
1个回答
0
投票

最终我发现创建两个

HTTPRoute
对象并向 JWT 安全路由添加如下所示的附加匹配器就可以解决问题。

- headers:
  - name: Authorization
    type: RegularExpression
    value: Bearer .*
  path:
    type: PathPrefix
    value: /foo
© www.soinside.com 2019 - 2024. All rights reserved.