【发布时间】:2021-04-30 00:09:58
【问题描述】:
我有一个资源服务器正在接收带有有效承载令牌的请求。我可以将@AuthenticationPrincipal Jwt token 用于我需要从令牌中获取声明的所有请求,或者我应该能够从SecurityContextHolder 获取用户信息,对吗?我想从上下文持有者那里得到它。我假设我需要在SecurityConfig 中定义 jwt 转换器?我找不到有关推荐方法的任何信息。
here 中的代码适用于一些旧版本的 Spring Security... 我正在使用最新的 Spring Boot 和 Spring Security 5.4.2
@Configuration
@EnableWebSecurity
@Order(1)
public class JwtSecurityConfig extends WebSecurityConfigurerAdapter {
@Value("${spring.security.oauth2.resourceserver.jwt.jwk-set-uri}")
private String jwkSetUri;
protected void configure(HttpSecurity http) throws Exception {
http
.httpBasic().disable()
.formLogin(AbstractHttpConfigurer::disable)
.csrf(AbstractHttpConfigurer::disable)
.authorizeRequests(authorize -> authorize
.mvcMatchers(HttpMethod.GET, "/test/**").authenticated()
.mvcMatchers(HttpMethod.POST, "/test/**").authenticated()
)
.oauth2ResourceServer().jwt().jwtAuthenticationConverter(jwtAuthenticationConverter());
}
private JwtAuthenticationConverter jwtAuthenticationConverter() {
JwtGrantedAuthoritiesConverter jwtGrantedAuthoritiesConverter = new JwtGrantedAuthoritiesConverter();
jwtGrantedAuthoritiesConverter.setAuthoritiesClaimName("entGrps");
jwtGrantedAuthoritiesConverter.setAuthorityPrefix("ROLE_");
JwtAuthenticationConverter jwtAuthenticationConverter = new JwtAuthenticationConverter();
jwtAuthenticationConverter.setJwtGrantedAuthoritiesConverter(jwtGrantedAuthoritiesConverter);
return jwtAuthenticationConverter;
}
@Bean
public JwtDecoder jwtDecoder() {
return NimbusJwtDecoder.withJwkSetUri(this.jwkSetUri).build();
}
}
【问题讨论】:
标签: spring-boot spring-security spring-oauth2