将match-claims添加到配置文件似乎没有什么作用。实际上,守护者在打开资源时总是抛出相同的错误(不管是否有该属性)。
我的Keycloak服务器位于一个码头容器中,可从内部网络作为http://keycloak:8080访问,而从外部网络以http://localhost:8085的形式访问。
我让网关管理员连接到内部网络中的密钥披风服务器。请求来自外部请求,因此,discovery-url将与'iss'令牌声明不匹配。
看门人正试图使用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-Gatekeeper 8.0.0和5.0.0上尝试过,两者都有相同的问题。
发布于 2019-11-28 18:10:59
它在发现数据验证过程中失败--您的设置违反了OIDC规范。
返回的颁发者值必须与直接用于检索配置信息的issuer URL相同。这也必须与从这个发行者发出的ID令牌中的iss索赔值相同。
它是必须的,所以你不能禁用它(除非你想破解源代码--它应该在coreos/go-oidc库中)。正确配置基础设施设置(例如,在内部/外部网络中使用相同的DNS名称,为内部网络请求重写内容,.)你会没事的。
发布于 2022-02-26 08:05:19
将DNS名称更改为host.docker.internal
通过这种方式,可以实现外部世界访问和对keycloak的内部调用。
https://stackoverflow.com/questions/59086511
复制相似问题