我有一个Sping Boot 项目,我试图同时做以下三件事:
1.如here所述禁用CSRF保护(此应用程序不应通过浏览器访问,因此这是我处理Spring Security对非GET端点的默认CSRF保护的方法)
1.在“Spring Cloud Azure 5.X”选项卡中,按照此处所述应用SecurityConfigurer
1.遵循新的lambda格式(我不确定是否可以应用SecurityConfigurer,尽管SecurityConfigurerAdapter.and()方法因此被弃用)
现在我有以下SecurityFilterChain方法:
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.apply(AadResourceServerHttpSecurityConfigurer.aadResourceServer())
.and()
.authorizeHttpRequests(authorizeHttpRequests ->
authorizeHttpRequests
.anyRequest()
.authenticated())
.csrf(csrf -> csrf.disable());
return http.build();
}
字符串
这让我从应用SecurityConfigurer中获得了所需的功能(因为它可以正确使用@PreAuthorize注解来检查Azure应用程序/用户/等上的权限),但它看起来没有正确禁用CSRF,因为我在从Postman调用时在任何非GET端点上都会收到401错误。
在应用SecurityConfigurer之后,执行进一步自定义的正确方法是什么?在遵循新的lambda格式的同时,是否可以这样做?
编辑:我已经为我原来的情况想出了一个变通办法,但我把这个问题留了下来,以防有人能从理论上回答这个问题。在这个特定的情况下,MS提供的配置程序已经为OAuth2授权的请求禁用了CSRF保护,这使得全局禁用CSRF保护的任务变得无关紧要,因为所有非GET端点都应该是OAuth2授权的。我在构建这个应用程序时遇到了这个问题,因为我在实验时试图暂时离开OAuth2授权。
因此,如果有人特别试图实现这个MS配置器并遇到CSRF问题:不要费心包括自定义SecurityFilterChain,并确保所有非GET端点都是OAuth2授权的。
1条答案
按热度按时间wfveoks01#
你检查过你的spring安全配置是否有效吗?看起来你的配置不起作用。检查@Configuration annotation是否放在你配置的class上面。