【发布时间】:2021-05-03 00:11:17
【问题描述】:
我有一个由 react-client(前端)、express server(后端)和 keycloak 组成的应用程序。出于开发目的,我在 docker-container 中运行 keycloak 并公开其相应的端口(8080);前端和后端在我的机器上本地运行。它们连接到上述端口上的 keycloak。后端服务于一些 REST 端点,这些端点受 keycloak 保护。一切正常。
但是,当我尝试通过将后端放入容器中并使用 docker-compose 运行所有内容(前端仍在我的本地计算机上运行)来将我的应用程序容器化以用于生产目的时,后端拒绝了来自前端的所有请求,尽管这些请求已附加使用有效的令牌。我想问题是后端无法连接 keycloak 来验证令牌,但我不知道为什么以及如何解决问题。
这是我的 docker-compose.yml:
version: "3.8"
services:
backend:
image: "backend"
build:
context: .
dockerfile: ./backend/Dockerfile
ports:
- "5001:5001"
keycloak:
image: "jboss/keycloak"
ports:
- "8080:8080"
environment:
- KEYCLOAK_USER=admin
- KEYCLOAK_PASSWORD=admin
- KEYCLOAK_IMPORT=/tmp/realm-export.json
volumes:
- ./realm-export.json:/tmp/realm-export.json
mongo_db:
image: "mongo:4.2-bionic"
ports:
- "27017:27017"
mongo_db_web_interface:
image: "mongo-express"
ports:
- "4000:8081"
environment:
- ME_CONFIG_MONGODB_SERVER=mongo_db
这是后端代码中的 keycloak 配置:
{
"realm": "License-game",
"bearer-only": true,
"auth-server-url": "http://keycloak:8080/auth/",
"ssl-required": "external",
"resource": "backend",
"confidential-port": 0
}
这是前端代码中的keycloak配置:
{
URL: "http://localhost:8080/auth/",
realm: 'License-game',
clientId: 'react'
}
【问题讨论】:
标签: node.js docker docker-compose keycloak