钥匙斗篷网守总是无法验证"iss"声明值



match-claims添加到配置文件似乎没有任何作用。实际上,Gatekeeper在打开资源(有或没有属性(时总是给我同样的错误。

我的Keycloak服务器位于docker容器内,可以从内部网络访问http://keycloak:8080,而从外部网络访问http://localhost:8085

我有网守连接到内部网络中的Keycloak服务器。请求来自外部请求,因此,discovery-url"iss">令牌声明不匹配。

Gatekeeper试图将discovery-url用作"iss">声明。为了覆盖它,我添加了match-claims属性,如下所示:

discovery-url: http://keycloak:8080/auth/realms/myRealm
match-claims:
iss: http://localhost:8085/auth/realms/myRealm

日志如下所示:

启动时

keycloak-gatekeeper_1  | 1.5749342705316222e+09 info    token must contain
{"claim": "iss", "value": "http://localhost:8085/auth/realms/myRealm"}
keycloak-gatekeeper_1  | 1.5749342705318246e+09 info    keycloak proxy service starting
{"interface": ":3000"}

根据要求

keycloak-gatekeeper_1  | 1.5749328645243566e+09 error   access token failed verification
{ "client_ip": "172.22.0.1:38128",
"error": "oidc: JWT claims invalid: invalid claim value: 'iss'.
expected=http://keycloak:8080/auth/realms/myRealm,
found=http://localhost:8085/auth/realms/myRealm."}

这最终导致403 禁止响应。


我已经在Keycloak-Gatekeeper8.0.0和5.0.0上尝试过,两者都有相同的问题。

  1. 这应该按照我尝试使用它的方式工作吗?
  2. 如果没有,我
  3. 错过了什么?,我如何验证国际空间站或绕过此验证?(最好是前者(?

它在发现数据验证期间失败 - 您的设置违反了 OIDC 规范:

返回的颁发者值必须与直接用于检索配置信息的颁发者 URL 相同。这也必须与此颁发者颁发的 ID 令牌中的 ISS 声明值相同。

它是必须的,所以你不能禁用它(除非你想破解源代码 - 它应该在coreos/go-oidc库中(。正确配置您的基础架构设置(例如,在内部/外部网络中对Keycloak使用相同的DNS名称,为内部网络请求重写内容,...(,您将没事的。

将 DNS 名称更改为host.docker.internal

  1. 令牌终结点:http://host.docker.internal/auth/realms/example-realm/open-id-connect/token

  2. 媒体资源文件中的颁发者网址作为 http://host.docker.internal/auth/realms/example-realm

通过这种方式,可以实现外部世界访问和内部对钥匙斗篷的调用

最新更新