我正在尝试为使用KeyCloak保护的我们的一个Web API项目设置集成测试环境。我的想法是创建docker compose文件,在其中连接所有必需的组件,然后尝试调用其中包含的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托管在不同的容器中时,我无法使用本地主机从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)无法连接到密钥斗篷端口18443:连接被拒绝
从文档中我发现,我需要在KeyCloak上启用SSL,但是整个过程有点混乱,而且不清楚要使用哪个域作为证书...
如果有人对我这样的情况有任何经验并可以分享,那就太好了!
答案 0 :(得分:1)
不清楚如何配置integration-test
网络以及在哪里运行集成测试(主机,容器)以获取确切答案。
但是我尝试。从主机访问密钥斗篷:
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应该可以访问密钥斗篷。