提问者:小点点

Web浏览器通过Istio的最终用户身份验证


奇怪的事情正在发生!

我的集群中有一个KeyCloak和一个简单的Httpbin应用程序。

我已经将Istio设置为使用keyCloak验证用户(如Istio留档中所述)

apiVersion: "authentication.istio.io/v1alpha1"
kind: "Policy"
metadata:
  name: auth-token
spec:
  targets:
    - name: httpbin
  origins:
    - jwt:
        issuer: "http://10.233.11.203/auth/realms/istio"
        jwksUri: "http://10.233.11.203/auth/realms/istio/protocol/openid-connect/certs"
  principalBinding: USE_ORIGIN

尝试时使用以下配置设置:

curl <IP_OF_HTTPBIN>

我得到源认证失败这是完全正常的,因为我没有提供任何访问令牌。

现在,当我使用我的网络浏览器访问应用程序时,我预计会出现某种错误,但不,它有效……

我的问题是它不应该工作。浏览器没有比curl命令更授权…

有关信息,我使用kubectl port-正向和反向代理从浏览器访问应用程序。


共2个答案

匿名用户

kubectl port-转发将流量从您机器的localhost直接转发到k8 pod,绕过所有Istio身份验证。当您针对httpbin的公共ip运行curl时,请求由Istio的网关处理,并验证jwt令牌。

Istio的jwt验证发生在下游,独立于您的pod。如果您直接访问pod,则出于开发目的故意绕过最终用户身份验证。这使您可以开发独立于身份验证方式的服务。

匿名用户

我找到了一种方法来解决这个问题…如果我使用网关访问应用程序,那么浏览器也会得到Origin Authentiation失败

但这并不能解释为什么浏览器首先绕过istio的策略而curl没有…