Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring security Spring OAuth2资源服务器-SecurityContextHolder中未反映用户名属性_Spring Security_Spring Security Oauth2 - Fatal编程技术网

Spring security Spring OAuth2资源服务器-SecurityContextHolder中未反映用户名属性

Spring security Spring OAuth2资源服务器-SecurityContextHolder中未反映用户名属性,spring-security,spring-security-oauth2,Spring Security,Spring Security Oauth2,我在JWT中有一个名为user\u name的声明,并且在spring security oauth2客户端提供程序专有属性中将相应的user name属性设置为user\u name: spring.security.oauth2.client.provider.my oauth provider.user name属性=user\u name 我还可以看到,ReactiveClientRegistrationRepository类(ClientRegistration.ProviderDet

我在JWT中有一个名为
user\u name
的声明,并且在spring security oauth2客户端提供程序专有属性中将相应的
user name属性设置为
user\u name

spring.security.oauth2.client.provider.my oauth provider.user name属性=user\u name

我还可以看到,
ReactiveClientRegistrationRepository
类(
ClientRegistration.ProviderDetails.UserInfoEndpoint
)正在正确读取此属性。但是当我在资源服务器上读取SecurityContextHolder.getContext().getAuthentication().getName()
时,我可以看到从(默认)
sub
-
IdTokenClaimNames.sub
声明中获取的值


为什么呢?我是否仍然错过了资源服务器端的一些附加配置,以指定由资源服务器上的
SecurityContextHolder.getContext().getAuthentication().getName()
获取并返回的
user name属性?我知道只有承载令牌(可能还有一些cookie)正在从客户端发送到资源服务器,因此网关/客户端可能还需要一些其他过滤器-只是猜测?

原因是您使用的是一个前缀为
security.oauth2.client
的属性,该属性适用于OAuth 2.0客户端

在SpringSecurity5.2.x中,没有SpringBoot属性来指示资源服务器的用户名属性,例如
Security.oauth2.resourceserver.xyz

您可以将自己的
转换器发布到DSL,不过:

JwtAuthenticationConverter=新的JwtAuthenticationConverter();
http
.oauth2ResourceServer()
.jwtAuthenticationConverter(jwt->{
JwtAuthenticationToken authentication=converter.convert(jwt);
返回新的JwtAuthenticationToken(authentication.getToken(),
authentication.getAuthories(),jwt.getClaim(“claim”);
});

感谢您的回答-刚刚在
JwtAuthenticationToken
中添加了强制转换,效果很好。关于这个问题,我添加了更多的想法,主要围绕着在resourceserver端同时具有
spring.security.oauth2.resourceserver.jwt.user name属性的想法,因此它会在客户端和资源服务器端自动进行增强,具有某种一致性。再次感谢!