Keycloak令牌交换发行者

时间:2020-08-26 18:38:34

标签: docker keycloak

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

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

例如

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

private static HttpClientHandler addHandlers = new HttpClientHandler { UseProxy = Proxy.UseProxy, Proxy = Proxy.UseProxy ? new WebProxy($"{Proxy.ProxyHost}:{Proxy.ProxyPort}") : null, ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => { return true; } }; private static HttpClient client = new HttpClient(addHandlers); iss

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

https://localhost:8080/auth/iss

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

那么,如何使用http://keycloak:8080字段解决此问题呢?

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

通过在我的docker容器iss中设置KEYCLOAK_HOSTNAME = localhost 现在从后端开始是issuer,但是即使尝试访问“ / open-id”端点,即使尝试访问“ admin”端点,我仍然会收到401。颁发者的主机名相同就足够了吗,还是必须相同?如果它们必须相同,那么我该如何处理一个端点使用https而另一个端点不使用https的事实呢?

0 个答案:

没有答案