【发布时间】:2021-06-16 22:20:27
【问题描述】:
我在配置 keycloak 以在我们的服务器上运行时遇到了一些问题。 在本地它工作得很好,但在我们的测试环境中,登录后,在使用接收到的访问令牌的任何调用中,我们得到“无效的令牌颁发者。预期的“http://keycloak:8080/auth/realms/{realmnName}”但是"http://{our-test-server-IP}/auth/realms/{realmName}"" 所以基本上,我们的后端连接到内部 keycloak docker 映像,但是当请求到来时,它期望发行者是配置的外部 IP,因此即使发行者基本上是相同的服务 keycloak 也会将它们视为不同并以 401 响应。
docker-compose.yml:
keycloak:
image: jboss/keycloak:12.0.4
restart: on-failure
environment:
PROXY_ADDRESS_FORWARDING: "true"
KEYCLOAK_USER: admin
KEYCLOAK_PASSWORD: password
KEYCLOAK_LOGLEVEL: DEBUG
KEYCLOAK_IMPORT: /etc/settings/realm.json -Dkeycloak.profile.feature.upload_scripts=enabled
TZ: Europe/Bucharest
DB_VENDOR: POSTGRES
DB_ADDR: db
DB_DATABASE: user
DB_SCHEMA: keycloak
DB_USER: user
DB_PASSWORD: user
ports:
- 8090:8080
volumes:
- ./settings:/etc/settings
depends_on:
- db
Spring application.yml:
keycloak:
cors: true
realm: Realm-Name
resource: back-office
auth-server-url: http://keycloak:8080/auth/
public-client: false
credentials:
secret: 8401b642-0ae9-4dc8-87a6-2f494b388a49
keycloak-client:
id: bcc94ed5-0099-40e0-b460-572eba3f0214
如果我们更改后端属性 auth-server-url 以连接到暴露的端点,而不是连接到内部 docker 容器,我们会得到超时,似乎它不想连接到它。我知道主要问题是我们在同一台服务器上同时运行 keycloak 实例和后端应用程序,但我不明白为什么它不应该工作以及为什么它们无法相互连接。
我们尝试在运行容器和 Keycloak 管理控制台时在环境中设置 FRONTEND_URL,但没有任何改变。我们还尝试在standalone.xml/standalone-ha.xml(./jboss-cli.sh --connect "/subsystem=keycloak-server/spi=hostname/provider=default:write-attribute 中将 forceBackendUrlToFrontendUrl 设置为 true (name=properties.forceBackendUrlToFrontendUrl, value=true)") 文件并使用 ./jboss-cli.sh --connect command=:reload 重置 docker 容器内的 keycloak 实例,但没有任何改变。
我知道,基本上通过设置 FRONTEND_URL,所有令牌都应该由 keycloak 实例签名,我们不会遇到这个问题,但我已经尝试了迄今为止在这个问题上找到的关于 keycloak 配置的所有内容,但似乎没有改变事情。如何确保签署访问令牌的颁发者和后端服务期望的颁发者相同(希望是前端)?我该如何配置它,是否缺少某些属性或者我在配置时做错了什么?
【问题讨论】:
-
你用“keycloak”掩盖了你的真实域名,或者这是从哪里来的?
-
keycloak:8080 指的是 docker 镜像。后端运行在同一个网络中,所以它可以通过 docker 镜像名称来引用它
-
找到解决这个问题的方法了吗?
-
@William 不是真的,没有任何建议对我有用。有一次,我们刚刚重新启动了后端服务器,它突然又重新工作了——所以这可能比我最初想象的要容易得多。为了避免这个问题,我们计划在未来部署在不同的服务器上
标签: spring docker spring-security oauth-2.0 keycloak