我在配置keybeat在服务器上运行时遇到了一些问题。在本地它工作得很好,但是在我们的测试环境中,在登录之后,在任何使用接收到的访问令牌的调用上,我们都会得到“invalid token issuer”。应为“http://keycloak:8080/auth/realms/{realmname}但是基本上是“http://{our test server ip}/auth/realms/{realmname}”,我们的后端连接到内部keydove docker映像,但是当请求到来时,它期望发行者是配置好的外部ip,因此即使发行者基本上是相同的服务keydove也认为它们是不同的,并用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应用.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容器,我们会得到一个超时,似乎它不想连接到它。我知道主要的问题是我们在同一台服务器上运行key斗篷示例和我们的后端应用程序,但我不明白为什么它不能工作,为什么它们不能相互连接。
我们尝试在运行容器时在环境中和keydepot管理控制台中设置前端url,但没有任何更改。我们还尝试在standalone.xml/standalone ha.xml(./jboss-cli.sh--connect”/subsystem=keydepot server/spi=hostname/provider)中将forcebackendurltofrontendurl设置为true=default:write-attribute(名称=properties.forcebackendurltofrontendurl,value=true)“)文件并使用./jboss-cli.sh--connect command=:reload重置docker容器中的keyClope示例,但没有任何更改。
我知道,基本上通过设置前端url,所有令牌都应该由key斗篷示例签名,我们不会有这个问题,但我已经尝试了所有我在这个问题上找到的关于key斗篷配置的东西,似乎没有任何改变。如何确保签名访问令牌的颁发者与后端服务期望的颁发者相同(希望是前端)?我该如何配置它,是否有一些属性我丢失了,或者在配置它时我做错了什么?
1条答案
按热度按时间ny6fqffe1#
可能与以下答案有关:https://stackoverflow.com/a/64095482/13494285
您可以将主机头值设置为预期的url。
要覆盖此行为,可以尝试设置
KEYCLOAK_HOSTNAME
环境变量是预期的url。似乎文档可能不是最新的(它表明
KEYCLOAK_FRONTEND_URL
变量),但是KEYCLOAK_HOSTNAME
用于设置fixed
提供者,如图所示。在这种情况下,也
KEYCLOAK_HTTP_PORT
需要将端口设置为8080