在 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。
我正在尝试为我们使用 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。