Keycloak Gatekeeper始终无法验证“ iss”索偿值

时间:2019-11-28 10:20:09

标签: keycloak keycloak-gatekeeper

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 上尝试过,但都存在相同的问题。

  1. 这应该以我尝试使用的方式工作吗?
  2. 如果没有,我缺少什么?如何验证 iss 或绕过此验证? (最好是前者)?

1 个答案:

答案 0 :(得分:0)

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

  

返回的颁发者值必须与直接用于检索配置信息的颁发者URL相同。此值也必须与此发卡行发行的ID令牌中的iss索赔值相同。

这是必须的,因此您不能禁用它(除非您想破解源代码-它应该在coreos / go-oidc库中)。正确配置基础结构设置(例如,对内部/外部网络中的Keycloak使用相同的DNS名称,对内部网络请求使用内容重写,...),一切都会很好。