配置元数据中提供的发行人 https://a.com/auth/realms/arealm 与请求的发行人 http://a.com/auth/realms/arealm 不匹配

问题描述 投票:0回答:1

我将 Spring Security 与 Keycloak 一起使用,并在我的属性中进行以下配置:

spring.security.oauth2.client.provider.keycloak.issuer-uri = http://a.com/auth/realms/arealm

协议部分是

http

我的密钥斗篷公开驻留在

https://a.com/auth/realms/arealm
,其中协议部分是
https

我的 keycloak 使用以下选项启动:

    command:
      - start
      - --optimized
      - --http-enabled=true
      - --proxy-headers
      - forwarded
      - --hostname
      - https://a.com/auth/
      - --hostname-backchannel-dynamic=true

在我的设置中,keycloak 和我的应用程序位于同一本地网络上,并且 https 由 keycloak 和我的应用程序前面的负载均衡器终止。如果我从我的应用程序调用以下网址,我可以成功获得响应:

curl http://a.com/auth/realms/arealm/.well-known/openid-configuration

所以我猜反向通道配置有效并且网络相关部分没问题。

但是 Spring Security 仍在抱怨并给我错误:

配置元数据中提供的发行者 https://a.com/auth/realms/arealm 与请求的发行者不匹配 http://a.com/auth/realms/arealm

我不想将 Spring 属性中的 url 更改为

https
,因为那样我就必须以某种方式强制我的应用程序通过互联网到达 keycloak,以便该请求通过负载均衡器并且 https 被终止。我通过使用我的公共 IP 地址在
/etc/hosts
中明确添加一行来做到这一点,但这是一个丑陋的解决方案,但它有效:

1.2.3.4a.com

如何阻止 Spring Security 抱怨颁发者 uri 不匹配?

spring-security keycloak spring-security-oauth2 aws-application-load-balancer
1个回答
0
投票

如何阻止 Spring Security 抱怨颁发者 uri 不匹配?

你不能。 OpenID 规范要求发现端点负载和令牌声明中的发行者标识符完全匹配(包括方案和可选的尾部斜杠)。

© www.soinside.com 2019 - 2024. All rights reserved.