将match-claims
添加到配置文件似乎没有任何作用。实际上, Gatekeeper 在打开资源(带有或不带有属性)时总是抛出相同的错误。
我的 Keycloak 服务器位于docker容器内,可以从内部网络以http://keycloak:8080
访问,而从外部网络可以以http://localhost:8085
访问。
我有 Gatekeeper 连接到内部网络中的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-Gatekeeper 8.0.0 和 5.0.0 上尝试过,但都存在相同的问题。
答案 0 :(得分:0)
在发现数据验证期间失败-您的设置违反了OIDC specification:
返回的颁发者值必须与直接用于检索配置信息的颁发者URL相同。此值也必须与此发卡行发行的ID令牌中的iss索赔值相同。
这是必须的,因此您不能禁用它(除非您想破解源代码-它应该在coreos / go-oidc库中)。正确配置基础结构设置(例如,对内部/外部网络中的Keycloak使用相同的DNS名称,对内部网络请求使用内容重写,...),一切都会很好。