码头网桥模式下的Keycloak授权:如何访问本地主机?

应用程序上下文是一个具有mongo db的节点js应用程序,它使用keycloak服务器进行具有开放标识的授权。 对于开发环境,我们有一个mongo容器,一个keycloak容器和一个应用程序服务器容器。

Keycloak容器在8080上有一个端口映射,以便我可以访问http://localhost:8080上的keycloak配置控制台。

应用程序容器具有9000上的端口映射,以便在http://localhost:9000上访问应用程序本身。

所有的3个容器都在docker网络里面,像application_default (用docker compose开始)。

在应用程序中,使用keycloak的openid auth所需的信息由以下环境变量管理:

 # KEYCLOAK CREDENTIALS APP_KEYCLOAK_REALM="http://localhost:8080/auth/realms/myrealm" APP_KEYCLOAK_RETURN_URL="http://localhost:9000/api/auth/openid/return" APP_KEYCLOAK_CLIENT_ID=myapplication APP_KEYCLOAK_CLIENT_SECRET="00d5c908-eade-4e26-bcf0-b9341ghie197" 

这些设置不起作用,通常实际上是在应用程序容器内部, localhost:8080APP_KEYCLOAK_REALM值不引用我的PC(和keycloak),而是引用到应用程序容器中。

现在,当我更换

 APP_KEYCLOAK_REALM="http://keycloak:8080/auth/realms/myrealm" 

应用程序可以去keycloak,但然后进行身份验证,我的浏览器卡住试图重定向我授权到一个网址,对他来说没有任何意义,以http://keycloak:8080/auth/realms...

我设法使配置工作的唯一方法是把我的电脑的实际IP地址放在环境文件中:

 # KEYCLOAK CREDENTIALS APP_KEYCLOAK_REALM="http://192.168.1.34:8080/auth/realms/myrealm" APP_KEYCLOAK_RETURN_URL="http://192.168.1.34:9000/api/auth/openid/return" APP_KEYCLOAK_CLIENT_ID=myapplication APP_KEYCLOAK_CLIENT_SECRET="00d5c908-eade-4e26-bcf0-b9341ghie197" 

这工作,但似乎并不理想的便携性(IP地址一直在改变)。

有没有一个标准的方法来做到这一点? 可能会重定向本地主机在码头的DNS到码头主机? 其他?

你可以做的事情很少。 一个是使用您的本地主机条目作为主机主机。 这样,主机上的浏览器就可以识别keycloak主机并将其用于身份验证。

否则,你不应该这样做。 你应该把一个nginx容器的端口80映射到主机。 然后,您可以使用基于URL的模式重定向到端口8000或9000

Interesting Posts