在 Docker 中使用 KeyCloak 设置集成测试环境

Setting up integration testing environment with KeyCloak in Docker

我正在尝试为我们使用 KeyCloak 保护的 Web API 项目之一设置集成测试环境。我的想法是创建 docker 组合文件,其中连接所有必需的组件,然后尝试调用包含在其中的 Web API 并验证响应。

这里是 docker 将 KeyCloak 和 Web API 连接在一起的组合文件的例子

keycloak:
  image: jboss/keycloak:3.4.3.Final
  environment:
    DB_VENDOR: POSTGRES
    KEYCLOAK_USER: admin
    KEYCLOAK_PASSWORD: admin
    POSTGRES_USER: keycloak
    POSTGRES_PASSWORD: keycloak
    POSTGRES_PORT_5432_TCP_ADDR: postgres
    POSTGRES_DATABASE: keycloak
    JDBC_PARAMS: 'connectTimeout=30'
  ports:
    - '18080:8080'
    - '18443:8443'
  networks:
    - integration-test
  depends_on:
    - postgres

test-web-api:
    image: test-web-api
    environment:
    - IDENTITY_SERVER_URL=https://keycloak:18443/auth/realms/myrealm
    networks:
    - integration-test
    ports:
    - "28080:8080"

现在,当我在不同的容器中托管 KeyCloak 和 Web API 时,我无法使用本地主机从 Web API 容器访问 KeyCloak,因此我需要使用 https://keycloak:18443/ 但是当我尝试它并从 KeyCloak 获取例如 .well-known/openid-configuration 时,我收到连接被拒绝的错误:

root@0e77e9623717:/app# curl https://keycloak:18443/auth/realms/myrealm/.well-known/openid-configuration curl: (7) 无法连接到 keycloak 端口 18443:连接被拒绝

从文档中我发现我需要在 KeyCloak 上启用 SSL,但整个过程有点混乱,而且不太清楚证书使用哪个域...

如果有人对我的情况有任何经验并可以分享,那就太好了!

不清楚您是如何配置 integration-test 网络的,以及您在哪里 运行 您的集成测试(主机、容器)以获得准确的答案。

但我尽力了。对于来自主机的 keycloak 访问:

https://<host IP or name>:18443/ 

来自 integration-test 网络中的容器:

https://keycloak:8443/

所以尝试配置test-web-api:

IDENTITY_SERVER_URL=https://keycloak:8443/auth/realms/myrealm

并且您的测试网络-api 应该能够访问 keycloak。