[英]Keycloak authorizations in docker network bridge mode : how to access localhost?
应用程序上下文是一个节点js应用程序,其mongo db使用keycloak服务器进行具有开放ID的授权。 对于开发环境,我们有一个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:8080
的APP_KEYCLOAK_REALM
值不是指我的PC(和keycloak),而是指app容器。
现在当我更换
APP_KEYCLOAK_REALM="http://keycloak:8080/auth/realms/myrealm"
应用程序可以转到keycloak然后进行身份验证,我的浏览器试图将我的权限重定向到一个对他来说没有任何意义的网址,以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主机吗? 其他?
你可以做的事情很少。 一种是在本地使用主机条目为keycloak主机。 这样,您在主机上的浏览器将识别keycloak主机并将其用于身份验证。
否则你不应该这样做。 您应该将端口80映射到的主机的nginx容器放入。 然后,您可以使用基于URL的模式重定向到端口8000或9000
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.