是否可以告诉Spring Boot Keycloak适配器Keycloak服务器可能具有多个别名?

时间:2018-07-17 15:48:17

标签: spring docker spring-boot spring-security keycloak

我正在两个不同的Docker容器中部署Keycloak和一个Spring Boot应用程序,而Keycloak正在保护该应用程序。

问题是用户通过浏览器登录,因此他们在诸如localhost:8080之类的地址上看到Keycloak服务器,而Spring Boot应用程序正在其旁边的docker容器上运行,因此看到keycloak_service之类的主机上提供服务。

Spring Boot应用程序从用户那里收到Keycloak给他的令牌,并看到它是由localhost:8080签名的,但是希望它是由keycloak_service签名的。然后给出错误15:29:12.062 [http-nio-29000-exec-8] ERROR o.k.a.r.AdapterRSATokenVerifier - Didn't find publicKey for kid: b4A5E3xbvc-ulr-w_u38p7aHRZIi9O36Na7I8r_L76M

到目前为止,我一直在使用临时修复程序,使该应用程序使用主机网络堆栈,以便它可以在localhost:8080上看到密钥隐藏。我最终将需要更改此设置,因为我需要Docker桥网络的其他功能。

我可以使用各种其他解决方案来解决该问题,但是我不禁感到这不是一个难题。我不是唯一一个在容器中的Keycloak实例旁边运行spring boot应用程序的人。我本来以为自然的解决方案是告诉Spring Boot它可以与keycloak_service上的keycloak进行通信,但是对于某些客户端,相同的Keycloak实例也称为localhost:8080,它应该接受由那也是。这可能吗?如果不是,是否有其他解决此问题的正常方法?

2 个答案:

答案 0 :(得分:2)

您的问题是,您需要使Keycloak可以从外部正确访问,而不仅是在服务器内部。像a= np.array([[1],[1],[0],[0]]) b= np.array([[ 1. ],[-0.5 ],[-0.8660254],[ 0. ]]) c= np.array([[ 1],[-1],[ 0],[ 0]]) d=np.array([[ 1],[0.5],[0.86], [0]]) a-b+c array([[1. ], [0.5 ], [0.8660254], [0. ]]) 这样的docker容器ID对于内部服务通信是有效的,但是在这里,浏览器正在请求url,因此没有必要使用它。

对于我的具体情况,我为此任务配置了一个nginx代理,为服务器分配了两个名称,但是代理转发到了我感兴趣的端口。

例如,假设您将服务器称为keycloak_servicemyapp.com。然后,假设您为密钥斗篷服务器发布了端口8080,为应用程序发布了8081。您需要以这种方式配置nginx:

auth.myapp.com

然后,您将客户端设置为与server { server_name myapp.com; location / { proxy_pass http://127.0.0.1:8081; } } server { server_name auth.myapp.com; location / { proxy_pass http://127.0.0.1:8080; } } 合作。另外,不要忘记将keycloak配置为work behind a proxy(您可能需要使用正确的配置来重建docker映像)。

另请参见:

答案 1 :(得分:0)

由于我没有添加评论的声誉,因此我将按照这种方式进行操作。

我具有与@Xtreme Biker上文所述类似的设置,但是我的应用仍然无法通过使用server_name配置中配置的nginx与keycloak通信。我可以从浏览器中调用myapp.com,然后将其重定向到auth.myapp.com(密钥斗篷)进行登录。成功登录后,密钥斗篷将使用有效的myapp.com重定向回到authorization_code(如我在调试时所见)。然后,myapp.com尝试通过调用authorization_code来交换http://auth.myapp.com/auth/realms/my-relam/protocol/openid-connect/token,但是它无法连接,并失败:java.net.ConnectException: Connection refused (Connection refused)

遇到类似问题的人找到了解决方案吗?