docker网桥模式中的Keycloak授权:如何访问localhost?

时间:2017-07-23 08:47:43

标签: docker keycloak docker-networking

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

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

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

所有3个容器都在像application_default这样的docker网络内(以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"

这些设置不起作用,实际上通常在应用程序容器内部,APP_KEYCLOAK_REALM的{​​{1}}值不是指我的PC(和keycloak),而是指应用程序容器。

现在我用

替换
localhost:8080

应用程序可以转到keycloak但是然后进行身份验证,我的浏览器一直试图将我的权限重定向到一个对APP_KEYCLOAK_REALM="http://keycloak:8080/auth/realms/myrealm"

开始并不意味着什么的网址的授权

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

http://keycloak:8080/auth/realms...

这有效,但似乎不适合移植(IP地址一直在变化)。

有没有标准的方法可以做到这一点?可以将docker dns中的localhost重定向到docker主机吗?其他

1 个答案:

答案 0 :(得分:1)

你可以做些什么。一种是在本地使用主机条目为keycloak主机。这样,主机上的浏览器将识别keycloak主机并将其用于身份验证。

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