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

Dan*_*ehn 5 spring spring-security spring-boot

我正在使用带有最新稳定版本的 Spring Boot 和 Sprign Security 的 Spring Boot 应用程序。我正在使用 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();
    }

}
Run Code Online (Sandbox Code Playgroud)

但是,执行此操作时,完整的 SAML 身份验证会丢失,并且不会执行单点登录等操作。我通过配置使用 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
Run Code Online (Sandbox Code Playgroud)

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

小智 12

下面的 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

欲了解更多详情,请点击下面的链接

https://docs.spring.io/spring-security/reference/servlet/exploits/csrf.html#servlet-csrf-configure-disable