在Spring Boot:Spring security 5.7和SAML中禁用CSRF/CORS



我使用的是一个Spring Boot应用程序,该应用程序具有最新的Spring Boot和Sprign Security稳定版本。我正在使用SAML2对ADFS IDP进行身份验证。这适用于所有GET请求。现在我需要使用PUT和POST,然后我想禁用csrf。

有了这段代码,我试图禁用csrf:

@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().and().cors().disable();
}
}

但是在执行此操作时,完整的SAML身份验证将丢失,并且不会执行Single Sign-On等操作。我使用SAML2的配置:

spring:
security:
saml2:
relyingparty:
registration:
DemoApp: 
entity-id: urn:id:demo-app
identityprovider:
entity-id: "http://adfs.local/adfs/services/trust"
metadata-uri: "https://adfs.local/FederationMetadata/2007-06/FederationMetadata.xml"     
singlesignon:
url: "https://adfs.local/adfs/ls"
sign-request: true

如何禁用csrf并保持SAML2的工作?

下面的Java配置将禁用Spring security 5.7中的CSRF保护

@Configuration
@EnableWebSecurity
public class WebSecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.csrf(csrf -> csrf.disable());
return http.build();
}
}

有关更多详细信息,请访问下面的链接

https://docs.spring.io/spring-security/reference/servlet/exploits/csrf.html#servlet-csrf配置禁用

WebSecurityConfigurerAdapter已弃用。使用SecurityFilterChain Bean来配置HttpSecurity,或者使用WebSecurityCustomizer Bean来配置WebSecurity。试试这个

@Bean
public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
http
.csrf().disable()
.cors().disable();      
return http.build();
}

最新更新