keydepot:从内部docker容器运行时,令牌颁发者无效

2j4z5cfb  于 2021-07-16  发布在  Java
关注(0)|答案(1)|浏览(372)

我在配置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斗篷配置的东西,似乎没有任何改变。如何确保签名访问令牌的颁发者与后端服务期望的颁发者相同(希望是前端)?我该如何配置它,是否有一些属性我丢失了,或者在配置它时我做错了什么?

ny6fqffe

ny6fqffe1#

可能与以下答案有关:https://stackoverflow.com/a/64095482/13494285
您可以将主机头值设置为预期的url。
要覆盖此行为,可以尝试设置 KEYCLOAK_HOSTNAME 环境变量是预期的url。
似乎文档可能不是最新的(它表明 KEYCLOAK_FRONTEND_URL 变量),但是 KEYCLOAK_HOSTNAME 用于设置 fixed 提供者,如图所示。
在这种情况下,也 KEYCLOAK_HTTP_PORT 需要将端口设置为8080

相关问题