我正在尝试为我们的一个使用KeyCloak保护的Web API项目设置集成测试环境。我的想法是创建docker compose文件,其中连接所有必需的组件,然后尝试调用contains中托管的Web API并验证响应。
以下是将KeyCloak和Web API连接在一起的docker compose文件的示例
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时,我无法使用localhost从Web API容器访问KeyCloak,所以我需要使用https://keycloak:18443/但是当我尝试它并获得例如.well-known / openid-从KeyCloak配置我得到连接拒绝错误:
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
并且你的test-web-api应该能够达到keycloak。