添加match-claims
到配置文件似乎没有做任何事情。实际上,Gatekeeper在打开资源(有或没有属性)时总是给我同样的错误。
我的Keycloak服务器位于 docker 容器内,可从内部网络http://keycloak:8080
访问,就像从外部网络访问http://localhost:8085
.
我让Gatekeeper连接到内部网络中的 Keycloak 服务器。该请求来自外部请求,因此,discovery-url
不会匹配“iss”令牌声明。
Gatekeeper 正试图使用discovery-url
as '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 Forbidden响应。
我已经在Keycloak-Gatekeeper 8.0.0和5.0.0上尝试过,两者都有同样的问题。
- 这应该按照我尝试使用它的方式工作吗?
- 如果没有,我缺少什么?,我如何验证iss或绕过此验证?(最好是前者)?