将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上尝试过,两者都有相同的问题。
- 这应该按照我尝试使用它的方式工作吗? 如果没有,我
- 错过了什么?,我如何验证国际空间站或绕过此验证?(最好是前者(?
它在发现数据验证期间失败 - 您的设置违反了 OIDC 规范:
返回的颁发者值必须与直接用于检索配置信息的颁发者 URL 相同。这也必须与此颁发者颁发的 ID 令牌中的 ISS 声明值相同。
它是必须的,所以你不能禁用它(除非你想破解源代码 - 它应该在coreos/go-oidc库中(。正确配置您的基础架构设置(例如,在内部/外部网络中对Keycloak使用相同的DNS名称,为内部网络请求重写内容,...(,您将没事的。
将 DNS 名称更改为host.docker.internal
-
令牌终结点:http://host.docker.internal/auth/realms/example-realm/open-id-connect/token
-
媒体资源文件中的颁发者网址作为 http://host.docker.internal/auth/realms/example-realm
通过这种方式,可以实现外部世界访问和内部对钥匙斗篷的调用