Spring - 匿名身份验证的访问被拒绝



我对Spring Security没有太多的专业知识,我有一个可能有点愚蠢的问题。几天来我一直在尝试解决问题,也许我误解了配置应用程序的方式。如果有人能为此带来一些光明,我将不胜感激。

我用Spring实现了一个REST API,我想为它增加安全性。从我读到的春季安全文档中...采用"默认拒绝"通常被认为是良好的安全实践,其中明确指定允许的内容和不允许其他所有内容。... 我同意。因此,我将身份验证要求添加到我的配置中。

但是,我想对 API 进行一些公开调用(从我的 GUI(,所以我认为匿名身份验证会起作用。同样,从我阅读的文档... "匿名身份验证"的用户和未经身份验证的用户之间没有真正的概念差异,所以一切都很好。

但是,当我执行这些调用时,我得到一个 403 响应(AbstractSecurityInterceptor 在决定身份验证时抛出一个 AccessDeniedException(。所以,我在这里留下几个问题+我的配置线,以防你知道我有什么问题和误解。

配置...

@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.cors().and()
.anonymous().and()
.authorizeRequests()
.antMatchers("/").permitAll()
.antMatchers(HttpMethod.POST, "/users/login").permitAll()
.anyRequest().authenticated().and()
// We filter the api/login requests
.addFilterBefore(new JwtLoginFilter("/users/login", authenticationManager()),
UsernamePasswordAuthenticationFilter.class)
.addFilterBefore(new JwtAuthenticationFilter(),
UsernamePasswordAuthenticationFilter.class);
}

问题。。。 1(匿名身份验证令牌仍然经过身份验证,对吗?

2( 如果我不自定义匿名身份验证的配置,是否需要匿名(( 行?当缺少身份验证时,匿名令牌在那里(当我调试时(

3( 配置中是否缺少任何内容来接受这些请求?

4( 文档提到了 ExceptionTranslatorFilter ,它应该处理 AuthenticationEntryPoint 的 AccessDeniedException。是否需要定义身份验证入口点?如果是这样,目的是什么?

我试图尽可能精确。我希望有人可以回复。 非常感谢您的帮助!

你需要把它放到你的配置文件中:

http.authorizeRequests().antMatchers(HttpMethod.OPTIONS, "/**").permitAll(); 

您是否对根"/"具有未经身份验证的访问权限?我问这个是因为看起来像是你打算用这条线: .antMatchers("/").permitAll()

我想为了允许未经身份验证的请求(或匿名身份验证的请求,请注意,对于 Spring 匿名和未经身份验证基本上是相同的(,您需要为这些路径添加 ant 匹配,如下所示: .antMatchers("/public-page").permitAll()

最新更新