【问题标题】:Spring Boot HttpSecurity - @PreAuthorize - How to set AuthenticationFilter?Spring Boot HttpSecurity - @PreAuthorize - 如何设置 AuthenticationFilter?
【发布时间】:2021-05-02 17:21:30
【问题描述】:

我目前正在开发 API 授权。所以基本上我有一个过滤器JwtAuthorizationFilter。例如,在我的 RestController 中,我想注释应该通过 @PreAuthorize("hasRole('ADMIN')") 过滤的请求。所以我现在的问题是:我如何设置WebSecurityConfigureAdapter(或任何其他东西)以将注释与 JwtAuthorizationFilter 链接?

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // Basically permit every request, but if needed (through @PreAuthorize) check via JwtAuthorizationFilter)
    }
}

谢谢! 最好的问候塞巴斯蒂安

【问题讨论】:

标签: java spring spring-boot spring-security spring-security-oauth2


【解决方案1】:

JwtAuthorizationFilter 的目的应该是设置Authentication 的授予权限。那么,Spring Security 的默认方法 security 就足够了。

你有几个选择:

使用 Spring Security 的内置 JWT 支持

如果 JWT 是由授权服务器生成的,那么 Spring Security's default JWT support 可能就足够了。 Spring Security 附带BearerTokenAuthenticationFilterJwtAuthenticationProvider。过滤器将解析Authorization 标头以获取令牌,并且提供程序将验证令牌并构造一个基于scopescp 声明的Authentication。在这种情况下,您会执行@PreAuthorize("hasAuthority('SCOPE_ADMIN')") 之类的操作。

如果您需要自定义如何将 JWT 声明转换为 GrantedAuthoritys,那么您可以发布 JwtAuthenticationConverter @Bean

有关完整的设置详细信息,请查看Spring Security's OAuth 2.0 Resource Server sample。不过,基本上,您的配置应该是这样的:

http
    .authorizeRequests((authz) -> authz
        .anyRequest().authenticated()
    )
    .oauth2ResourceServer((oauth2) -> oauth2
        .jwt(Customizer.withDefaults())
    );

在没有授权服务器的情况下使用 Spring Security 的内置 JWT 支持

Spring Security 的现有支持在设计时考虑了授权服务器,但这不是必需的。

您可以改为让您的应用程序mint self-signed tokens

自己动手

您可以保留您的JwtAuthorizationFilter,但尚不清楚为什么 Spring Security 现有的支持不足。要添加过滤器,您只需执行addFilterBefore(myFilter, BearerTokenAuthenticationFilter.class)。您可以查看 BearerTokenAuthenicationFilter 作为创建自己的过滤器时应考虑的一些事项的示例。

【讨论】:

  • 感谢您的详细说明!
  • 我很高兴,@SebastianBrunnert
猜你喜欢
  • 2021-06-29
  • 2018-07-15
  • 2018-12-18
  • 2021-07-04
  • 2023-03-18
  • 2014-12-25
  • 2014-10-23
  • 2020-03-04
  • 2017-10-18
相关资源
最近更新 更多