Keycloak:作为 docker 服务运行时无效的令牌颁发者

Вла*_*лав 3 spring docker keycloak

我有个问题:

WWW-Authenticate Bearer realm="test", error="invalid_token", error_description="Invalid token issuer. Expected 'http://keycloak:8080/auth/realms/test', but was 'http://localhost:8080/auth/realms/test'"

我的设置:

应用程序.yml

keycloak:
  realm: test
  resource: api
  auth-server-url: http://keycloak:8080/auth
  ssl-required: external
  autodetect-bearer-only: true
  cors: true
  principal-attribute: preferred_username
  credentials:
    secret: 2b553733-8d5f-4276-8ace-17112ac7ac20
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml

keycloak:
    image: jboss/keycloak:10.0.0
    environment:
      - KEYCLOAK_USER=admin
      - KEYCLOAK_PASSWORD=admin
    ports:
      - "8080:8080"
    networks:
      - net
Run Code Online (Sandbox Code Playgroud)

认证网址:http://localhost:8080/auth/realms/test/protocol/openid-connect/auth 令牌网址:http://localhost:8080/auth/realms/test/protocol/openid-connect/token

我明白问题存在的原因,但我不明白如何解决它。

小智 5

Keycloak 的默认主机名提供程序 ( https://www.keycloak.org/docs/latest/server_installation/#default-provider ) 有一个名为 frontendURL 的属性,它应该设置为公开 Keycloak 的公共 URL。

设置 frontendURL 可确保所有前端通道 URL(如 issuer、authorization_endpoint)使用配置的值作为 URL 中的主机名,而后端通道 URL 在请求中继续使用主机名。