在网关/代理后面配置 Spring Security OIDC/OAuth2

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

我在 Spring Boot 微服务上遇到了有关 Spring Security 中令牌解密部分的问题。基本上会出现以下问题: 当在 @AuthenticationPrincipal Jwt jwt 上调用 getSubject() 方法时,会发生以下错误

原因:java.lang.IllegalStateException:配置中提供的颁发者“https://ids-for-spid.aqp.it:443/oauth2/token”与请求的颁发者“https://clidens1”不匹配.aqp.it:9443/oauth2/token"

我猜这是由于以下情况造成的:在众所周知的文件中,有一个发行者的网址库与传递给库的网址库不同(我猜是因为有代理或网关),我该如何解决以下问题?

具体来说,访问众所周知的文件的url如下https://clidens1.aqp.it:9443/oauth2/token/.well-known/openid-configuration 编辑后,里面有以下发行者https://ids-for-spid.aqp.it/oauth2/token,它与我唯一可访问的基本网址 clidens1.aqp.it 不同。

spring-boot spring-mvc spring-security proxy spring-security-oauth2
1个回答
3
投票

在 JWT 验证期间,将根据 conf 中的颁发者 URI 检查令牌

iss
声明。它必须完全匹配(即使尾部斜杠也很重要,如果有的话)。

对于令牌验证,还需要授权服务器公钥。它是使用 JWK-set URI 获取的,通常在 OIDC 配置中找到,它本身通常可以从从

iss
声明值推导出的位置获得。

您应该配置您的授权服务器以用作

iss
声明其他服务可访问的 URI。

在Keycloak设置中

hostname
配置属性可以解决您的问题,但您显然正在使用另一个授权服务器。

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