应用程序上下文是一个节点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主机吗?其他
答案 0 :(得分:1)
你可以做些什么。一种是在本地使用主机条目为keycloak主机。这样,主机上的浏览器将识别keycloak主机并将其用于身份验证。
否则你不应该这样做。您应该将端口80映射到的主机的nginx容器放入。然后,您可以使用基于网址的模式重定向到端口8000或9000