在配置keycloak以在服务器上运行时,我遇到了一些问题。在本地,它工作得很好,但是在我们的测试环境中,在登录后,在使用接收到的访问令牌的任何呼叫中,我们都会得到“无效令牌颁发者”。预期的"http://keycloak:8080/auth/realms/{realmnName}“但是是"http://{our-test-server-IP}/auth/realms/{realmName}"”,所以基本上,我们的后端连接到内部的keycloak对接映像,但是当请求出现时,它希望发行者是配置的外部IP,所以即使发出者基本上是相同的服务密钥披风,他们认为他们是不同的,并以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更改为连接到公开的端点,而不连接到内部对接器容器,则会得到超时,似乎它不想连接到它。我知道主要的问题是我们同时在同一台服务器上运行keycloak实例和后端应用程序,但是我不明白为什么它们不能工作,为什么它们不能连接到彼此。
我们尝试在运行容器和Keycloak管理控制台时在环境中设置FRONTEND_URL,但没有发生任何变化。我们还尝试将standalone.xml/standalone-ha.xml(./jboss-cli.sh -连接"/subsystem=keycloak-server/spi=hostname/provider=default:write-attribute(name=properties.forceBackendUrlToFrontendUrl,value=true)文件中的forceBackendUrlToFrontendUrl设置为true,并使用./jBos-cli.sh-connect command=:reload重置对接容器中的keycloak实例,但是没有什么改变。
我理解,基本上,通过设置FRONTEND_URL,所有令牌都应该由keycloak实例签名,我们不会遇到这个问题,但是我已经尝试了到目前为止在这个问题上找到的关于密钥披风配置的所有东西,而且似乎没有任何改变。如何确保签名访问令牌的发行者和后端服务所期望的发出者是相同的(希望是前端)?我如何配置它,是否有我丢失的某些属性,或者在配置它时我做错了什么?
发布于 2021-03-19 06:37:51
可能与这里的答案有关:https://stackoverflow.com/a/64095482/13494285
可以将header值设置为预期的url。
若要重写此行为,可以尝试将KEYCLOAK_HOSTNAME
环境变量设置为预期的url。
似乎文档并不是最新的(它建议在KEYCLOAK_FRONTEND_URL
上使用这里变量),但是KEYCLOAK_HOSTNAME
被用来设置fixed
提供程序,就像在这里。上看到的那样。
在此上下文中,还需要KEYCLOAK_HTTP_PORT
将端口设置为8080。
发布于 2022-02-02 06:29:44
将KEYCLOAK_HOSTNAME设置为外部主机名(如在KEYCLOAK_FRONTEND_URL中定义的那样)对我的情况是有效的(eclipse安装在一个普通的kubernetes集群上)
https://stackoverflow.com/questions/66709337
复制相似问题