spring-boot - 如何在 Spring Boot OAuth2 的 SecurityContextHolder 中获取 JWT 令牌?
问题描述
我有一个资源服务器正在接收带有有效承载令牌的请求。我可以@AuthenticationPrincipal Jwt token
用于所有需要从令牌中获取声明的请求,或者我应该能够从中获取用户信息SecurityContextHolder
?我想从上下文持有者那里得到它。我假设我需要在我的SecurityConfig
? 我找不到有关推荐方法的任何信息。
这里的代码适用于一些旧版本的 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-security-oauth2-resource-server依赖项,我认为最好使用它@AuthenticationPrincipal Jwt token
来获取令牌的声明。
这是更简单和更少的样板代码。
但这取决于您,Imranmadbar 的解决方案也有效)
推荐阅读
- kubernetes - Openshift:无法创建部署程序 pod
- python - 从makefile调用的python找不到urllib.request
- c# - 如果不为 null,则在一个 LINQ 行中获取属性的值
- python - 从python中的字符串中获取最后一个单词
- javascript - 在 React Class 组件上显示模式
- reactjs - 更改状态时,是只渲染使用该状态的组件还是所有同级别的组件都渲染?
- windows - 为什么我的 AutoHotKey 脚本在按下 Enter/NumpadEnter 时不发送复选框 - 仅在单击按钮时?
- node.js - 来自 mongodb-memory-server 的 MongoMemoryReplSet 与 jest 抛出打开句柄错误
- flutter - 为什么颤振`pub get`更改pubspec.lock?
- c# - 无法使用 Visual Studio 2019 连接 MySQL 数据库