spring-security 在Sping Boot 中禁用CSRF / CORS:Spring安全5.7和SAML

ljo96ir5  于 2022-11-11  发布在  Spring
关注(0)|答案(2)|浏览(217)

我使用的是Sping 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身份验证会丢失,并且不会执行单点登录等操作。

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正常工作?

jjhzyzn0

jjhzyzn01#

不赞成使用WebSecurityConfigurerAdapter。请使用SecurityFilterChain Bean来配置HttpSecurity,或使用WebSecurityCustomizer Bean来配置WebSecurity。请尝试以下操作

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

stszievb2#

下面的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-configure-disable

相关问题