docker - 通过网络别名访问 Docker 内部的 Keycloak-Service
问题描述
设想
我已经保护了以开放自由运行的 Web 服务(JakartaEE + Microprofile + JWT)。作为 jwt 令牌的发行者,我使用 keycloak。对于测试和开发,我想在 docker 中运行这两个服务。因此我写了一个 docker-compose 文件。作为测试客户端,我将 JUnit 与 microprofile-client 一起使用。这是在 docker 之外运行的。
问题
我可以通过主机上的 localhost 检索 JWT-Token - 例如:
POST /auth/realms/DC/protocol/openid-connect/token HTTP/1.1
Host: localhost:8080
Content-Type: application/x-www-form-urlencoded
realm=DC&grant_type=password&client_id=dc&username=dc_editor&password=******
问题是,从 web 服务 localhost 的角度来看,它不是 keycloak 服务器。针对颁发者的 JWT-Token-Validation 失败。
目标
我想使用其 docker-internal 网络别名从主机访问 keycloak 服务器 - 例如dcAuthServer
。JWT-Token 将被正确验证。
代码
docker-compose 文件如下所示:
version: "3.8"
services:
dcWebservice:
environment:
- DC_AUTH_SERVER_HOST=dcAuthServer
- DC_AUTH_SERVER_PORT=8080
- DC_AUTH_SERVER_REALM=DC
image: dc_webservice:latest
ports:
- "9080:9080"
networks:
- dcNetwork
dcAuthServer:
image: dc_keycloak:latest
ports:
- "8080:8080"
networks:
dcNetwork:
aliases:
- dcAuthServer
healthcheck:
test: "curl --fail http://localhost:8080/auth/realms/DC || false"
networks:
dcNetwork:
该环境在 open liberty 服务器DC_AUTH*
的 mpJwt-configuration 中使用:server.xml
<mpJwt id="dcMPJWT" audiences="dc" issuer="http://${DC_AUTH_SERVER_HOST}:${DC_AUTH_SERVER_PORT}/auth/realms/${DC_AUTH_SERVER_REALM}"
jwksUri="http://${DC_AUTH_SERVER_HOST}:${DC_AUTH_SERVER_PORT}/auth/realms/${DC_AUTH_SERVER_REALM}/protocol/openid-connect/certs"/>
这issuer
是我必须为 JWT-Token 放置一个受信任的发行者的地方。
我希望我没有忘记重要信息 - 只要问!
在此先感谢罗伯特
解决方案
推荐阅读
- javascript - 为什么我的按钮不使用 ajax 和 jquery 提交表单?
- python - csv.DictReader / csv.DictWriter vs Panda 库数据 Frame -
- python - 基于位域创建字符串
- java - Java 和 Gradle 是否有不同的模块源结构?
- r - R:你如何计算(百分比)匹配观察?
- sql - 用同一表中另一列的数据填充列
- java - 简单服务器客户端程序中的 EOF- 和 SocketException
- javascript - 如何获取数组项的相反索引和值?
- php - 将默认值设置为 jquery 范围滑块
- c - 取消引用数组的地址与数组元素的地址不匹配