403 Forbidden,docker容器之间的通信
Posted
技术标签:
【中文标题】403 Forbidden,docker容器之间的通信【英文标题】:403 Forbidden, communication among docker containers 【发布时间】: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'
This is the configuration of keycloak for backend
【问题讨论】:
【参考方案1】:在您的情况下,后端和前端使用不同的 Keycloak URL - http://keycloak:8080/auth/
与 http://localhost:8080/auth/
,因此他们期望令牌中有不同的颁发者。
所以是的,来自前端的令牌是有效的,但不适用于后端。因为那个人期望令牌中有不同的发行人价值。在任何地方都使用相同的 keycloak 域,你想遇到这种问题。
【讨论】:
【参考方案2】:这几天我也遇到了同样的问题。如前所述,问题出在令牌发行者内部。
为了使其正常工作,请参阅此solution
【讨论】:
以上是关于403 Forbidden,docker容器之间的通信的主要内容,如果未能解决你的问题,请参考以下文章
本地 pypi 服务器在注册包时告诉我 403 Forbidden
docker login Harbor时报错403 Forbidden
官方 nginx docker 在提供静态文件时给出 403 Forbidden