首页 > 解决方案 > Keycloak 令牌交换发行者

问题描述

我正在尝试建立一个系统,允许用户使用由旧身份解决方案创建的令牌来登录 keycloak。它的工作方式是我有一个接受这些令牌的服务器,验证它们并识别用户,然后模拟用户从 keycloak 获取访问/刷新令牌,然后将其传递回用户。

这(大部分)有效,但我遇到了问题。服务器通过 docker 网络与 keycloak 对话,用户通过公共互联网与 keycloak 对话。以这种方式获得的令牌中的“iss”字段包含 Docker 网络中的 keycloak 服务器的地址

例如

我通过 localhost:8080 登录获得的令牌

isshttps://localhost:8080/auth/

我通过 docker 网络从模拟中获得的令牌

isshttp://keycloak:8080

如果我从 docker 网络内部使用令牌,它们就可以工作,但在此之外,它们会因为发行者无效而被拒绝。在寻找答案时,我在 keycloak 存储库上遇到了这个PR,但我不清楚如何应用该解决方案,也找不到任何这样做的人的例子。

那么,我究竟该如何解决这个issuer领域的问题呢?

编辑:@Turing85 的一些帮助让我更接近解决方案,

通过在我的 docker 容器中设置 KEYCLOAK_HOSTNAME=localhost ,来自后端的 iss 现在是http://localhost:8080/auth/,但是如果我尝试访问“admin”端点,我仍然会得到 401,即使令牌适用于“/open-id”端点。发行者主机名相同是否足够,或者它们必须相同?如果它们必须相同,我该如何处理一个端点使用 https 而另一个端点不使用的事实?

标签: dockerkeycloak

解决方案


推荐阅读