在迁移到 Spring Boot 3之后,
extends ResourceServerConfigurerAdapter is deprecrated.
因此,无法使用重写方法
@Override
public void configure(ResourceServerSecurityConfigurer config) {
config.tokenServices(tokenServices());
}
我可以用
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeHttpRequests(auth->auth.
requestMatchers(whitelistedEndPoints()).permitAll()
.anyRequest()
.anonymous())
.httpBasic().disable();
return http.build();
}
我有一个现有的代码从OAuth获取jwt令牌作为
public String getJwtTokenFromAuth() {
OAuth2Authentication auth =(OAuth2Authentication) SecurityContextHolder.getContext().getAuthentication();
OAuth2AuthenticationDetails oauth2AuthenticationDetails = (OAuth2AuthenticationDetails) auth.getDetails();
return oauth2AuthenticationDetails.getTokenValue();
}
然而
OAuth2 Authentication和OAuth2 AuthenticationDetails不可用
如何将此代码/功能替换为Sping Boot 3的新Spring安全模块?下面是pom的依赖项,请建议我是否需要添加/删除任何?
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-resource-server</artifactId>
</dependency>
2条答案
按热度按时间unftdfkk1#
Spring Security OAuth2已被弃用并删除了一段时间。替换是内置在Spring Security本身中的,要使用的依赖项正是您已经知道的:
所需的相关性为:
为了获得资源服务器中的令牌值,可以执行以下操作
为了确保在主体中正确配置角色,您可以使用以下内容:
为了解码并使spring验证你的jwt,你可以配置如下:
Spring安全管道可以如下所示:
chy5wohz2#
为什么IDE(和编译器)找不到
OAuth2Authentication
OAuth2Authentication
在2017年9月迁移到Spring Security 5时被删除。Spring Security 6(和5)中OAuth2的默认Authentication
实现是:JwtAuthenticationToken
资源服务器(您的情况显然是因为您依赖于spring-security-oauth2-resource-server
并期望JWT)BearerTokenAuthentication
用于资源服务器,具有访问令牌内省功能(在配置中称为opaqueToken
,即使您可以内省JWT)OAuth2AuthenticationToken
客户端我之所以写“default”是因为切换到资源服务器的其他
Authentication
实现非常容易(但这是另一个主题)。在安全上下文中访问
Authentication
或者:
SecurityContextHolder
静态访问器,就像您已经在做的那样@Controller
方法参数“神奇地”注入(让框架在安全上下文保持器中检索Authentication
的方便工具)请注意,如果请求授权丢失或无效,则安全上下文中可能有
AnonymousAuthenticationToken
(您可以使用isAuthenticated()
,hasAuthority()
等访问控制规则进行保护)。在资源服务器中使用JWT解码器和默认
Authentication
实现的代码示例JwtAuthenticationToken
可能需要替换为其他配置选项中的其他内容(内省、OAuth2客户端、返回自定义身份验证实现的身份验证转换器)附言
如果使用Sping Boot 3发现OAuth2 / OpenID,您可能会发现my tutorials很有帮助,并解释了为什么@Valerio Vaudi的答案中的配置不是最佳的(在单个安全过滤器链中混合客户端和资源服务器配置绝对不是一个好主意)。