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

10
应用程序上下文是一个使用MongoDB和Keycloak服务器(使用OpenID进行授权)的Node.js应用程序。对于开发环境,我们有一个Mongo容器、一个Keycloak容器和一个应用服务器容器。
Keycloak容器的端口映射在8080上,这样我就可以通过http://localhost:8080访问Keycloak配置控制台。
应用程序容器的端口映射在9000上,以便在http://localhost:9000上访问应用程序本身。
所有3个容器都在像application_default这样的Docker网络中(使用docker-compose启动)。
在应用程序内,管理与Keycloak进行OpenID身份验证所需的信息的环境变量如下:
# 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"
这些设置不起作用,实际上非常正常,因为在应用程序容器内,APP_KEYCLOAK_REALM值为localhost:8080并不是指向我的个人电脑(和keycloak)而是指向应用程序容器。

现在当我替换为

APP_KEYCLOAK_REALM="http://keycloak:8080/auth/realms/myrealm"
应用程序可以访问Keycloak,但在进行身份验证时,我的浏览器卡住了,试图将我重定向到一个与其无关的URL进行授权,该URL以http://keycloak:8080/auth/realms...开头。我成功让配置工作的唯一方法是将我的PC的实际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地址一直在变化)。

有没有标准的方法可以解决这个问题?也许可以将docker dns中的localhost重定向到docker主机?还有其他方法吗?


有没有标准的方法可以解决这个问题?也许可以将docker dns中的localhost重定向到docker主机?还有其他方法吗?

有没有解决方案? - bdparrish
请提供更多上下文或详细信息,以便我可以更好地理解您的请求。 - Ryan
请按照此处所述使用KEYCLOAK_FRONTEND_URL:https://dev59.com/questions/v1UL5IYBdhLWcg3wOVy- - Ryan
1个回答

0

关于这个问题,有几件事情你可以做。一种方法是在本地使用主机条目来设置keycloak主机。这样,你的主机上的浏览器将识别keycloak主机并用它进行身份验证。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接