Yve*_*las 8 docker keycloak docker-networking
应用程序上下文是一个带有 mongo db 的 node js 应用程序,使用 keycloak 服务器进行具有开放 ID 的授权。对于开发环境,我们有一个 mongo 容器、一个 keycloak 容器和应用服务器容器。
Keycloak 容器在 8080 上有一个端口映射,以便我可以访问http://localhost:8080.
应用程序容器在 9000 上有一个端口映射来访问应用程序本身 http://localhost:9000。
所有 3 个容器都在一个 docker 网络中application_default(从 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"
Run Code Online (Sandbox Code Playgroud)
这些设置不起作用,通常实际上就像在应用程序容器内部一样, 的APP_KEYCLOAK_REALM值localhost:8080不是指我的 PC(和 keycloak),而是指应用程序容器。
现在当我替换为
APP_KEYCLOAK_REALM="http://keycloak:8080/auth/realms/myrealm"
Run Code Online (Sandbox Code Playgroud)
该应用程序可以转到 keycloak,但是为了进行身份验证,我的浏览器被卡住了,试图将我重定向到一个对他来说没有任何意义的 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"
Run Code Online (Sandbox Code Playgroud)
这有效,但似乎不是可移植性的理想选择(IP 地址一直在变化)。
有没有标准的方法来做到这一点?可以将 docker dns 中的 localhost 重定向到 docker 主机吗?其他的?
您可以采取一些措施来解决这个问题。一种是使用本地 keycloak 主机上的主机条目。这样,主机上的浏览器将识别 keycloak 主机并使用它进行身份验证。
否则你不应该这样做。您应该放置一个 nginx 容器,将端口 80 映射到主机。然后您可以使用基于 url 的模式重定向到端口 8000 或 9000
| 归档时间: |
|
| 查看次数: |
1481 次 |
| 最近记录: |