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

403 forbidden啥意思,怎么修复解决403 forbidden

403 forbidden nginx怎么解决

nginx 403 forbidden怎么解决