首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spring Security SAML与samesite=Lax的兼容性

Spring Security SAML是一个基于Spring框架的安全认证和授权解决方案,用于在单点登录(SSO)环境中实现SAML协议。SAML(Security Assertion Markup Language)是一种基于XML的开放标准,用于在不同的安全域之间传递身份验证和授权数据。

Samesite=Lax是一种用于增强Web应用程序安全性的Cookie属性。它可以防止跨站点请求伪造(CSRF)攻击,限制了第三方网站对Cookie的访问。当设置为Lax时,Cookie只能在同站点的安全连接中发送,而在跨站点请求中不会发送。

关于Spring Security SAML与samesite=Lax的兼容性,目前的Spring Security版本(5.x及以上)已经支持samesite属性的配置。可以通过配置Spring Security的CookieSerializer来设置samesite属性的值。具体配置方式如下:

  1. 在Spring Security配置文件中,添加以下配置:
代码语言:txt
复制
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/saml/**").permitAll()
                .anyRequest().authenticated()
                .and()
            .apply(saml())
                .sso()
                    .defaultSuccessURL("/home")
                    .and()
                .and()
            .logout()
                .logoutSuccessUrl("/");
    }

    @Bean
    public SAMLConfigurer saml() {
        return new SAMLConfigurer();
    }

    private static class SAMLConfigurer extends SAMLConfigurerAdapter {
        @Override
        public void configure(HttpSecurity http) throws Exception {
            http
                .csrf().disable()
                .addFilterBefore(metadataGeneratorFilter(), ChannelProcessingFilter.class)
                .addFilterAfter(samlFilter(), BasicAuthenticationFilter.class);
        }
    }

    @Bean
    public SAMLAuthenticationProvider samlAuthenticationProvider() {
        return new SAMLAuthenticationProvider();
    }

    @Bean
    public SAMLUserDetailsService samlUserDetailsService() {
        return new SAMLUserDetailsServiceImpl();
    }

    @Bean
    public SAMLAuthenticationProvider samlAuthenticationProvider() {
        return new SAMLAuthenticationProvider();
    }

    @Bean
    public SAMLUserDetailsService samlUserDetailsService() {
        return new SAMLUserDetailsServiceImpl();
    }

    @Bean
    public SAMLConfigurer saml() {
        return new SAMLConfigurer();
    }

    @Bean
    public SAMLAuthenticationProvider samlAuthenticationProvider() {
        return new SAMLAuthenticationProvider();
    }

    @Bean
    public SAMLUserDetailsService samlUserDetailsService() {
        return new SAMLUserDetailsServiceImpl();
    }

    @Bean
    public SAMLConfigurer saml() {
        return new SAMLConfigurer();
    }

    @Bean
    public SAMLAuthenticationProvider samlAuthenticationProvider() {
        return new SAMLAuthenticationProvider();
    }

    @Bean
    public SAMLUserDetailsService samlUserDetailsService() {
        return new SAMLUserDetailsServiceImpl();
    }

    @Bean
    public SAMLConfigurer saml() {
        return new SAMLConfigurer();
    }

    @Bean
    public SAMLAuthenticationProvider samlAuthenticationProvider() {
        return new SAMLAuthenticationProvider();
    }

    @Bean
    public SAMLUserDetailsService samlUserDetailsService() {
        return new SAMLUserDetailsServiceImpl();
    }

    @Bean
    public SAMLConfigurer saml() {
        return new SAMLConfigurer();
    }

    @Bean
    public SAMLAuthenticationProvider samlAuthenticationProvider() {
        return new SAMLAuthenticationProvider();
    }

    @Bean
    public SAMLUserDetailsService samlUserDetailsService() {
        return new SAMLUserDetailsServiceImpl();
    }

    @Bean
    public SAMLConfigurer saml() {
        return new SAMLConfigurer();
    }

    @Bean
    public SAMLAuthenticationProvider samlAuthenticationProvider() {
        return new SAMLAuthenticationProvider();
    }

    @Bean
    public SAMLUserDetailsService samlUserDetailsService() {
        return new SAMLUserDetailsServiceImpl();
    }

    @Bean
    public SAMLConfigurer saml() {
        return new SAMLConfigurer();
    }

    @Bean
    public SAMLAuthenticationProvider samlAuthenticationProvider() {
        return new SAMLAuthenticationProvider();
    }

    @Bean
    public SAMLUserDetailsService samlUserDetailsService() {
        return new SAMLUserDetailsServiceImpl();
    }

    @Bean
    public SAMLConfigurer saml() {
        return new SAMLConfigurer();
    }

    @Bean
    public SAMLAuthenticationProvider samlAuthenticationProvider() {
        return new SAMLAuthenticationProvider();
    }

    @Bean
    public SAMLUserDetailsService samlUserDetailsService() {
        return new SAMLUserDetailsServiceImpl();
    }

    @Bean
    public SAMLConfigurer saml() {
        return new SAMLConfigurer();
    }

    @Bean
    public SAMLAuthenticationProvider samlAuthenticationProvider() {
        return new SAMLAuthenticationProvider();
    }

    @Bean
    public SAMLUserDetailsService samlUserDetailsService() {
        return new SAMLUserDetailsServiceImpl();
    }

    @Bean
    public SAMLConfigurer saml() {
        return new SAMLConfigurer();
    }

    @Bean
    public SAMLAuthenticationProvider samlAuthenticationProvider() {
        return new SAMLAuthenticationProvider();
    }

    @Bean
    public SAMLUserDetailsService samlUserDetailsService() {
        return new SAMLUserDetailsServiceImpl();
    }

    @Bean
    public SAMLConfigurer saml() {
        return new SAMLConfigurer();
    }

    @Bean
    public SAMLAuthenticationProvider samlAuthenticationProvider() {
        return new SAMLAuthenticationProvider();
    }

    @Bean
    public SAMLUserDetailsService samlUserDetailsService() {
        return new SAMLUserDetailsServiceImpl();
    }

    @Bean
    public SAMLConfigurer saml() {
        return new SAMLConfigurer();
    }

    @Bean
    public SAMLAuthenticationProvider samlAuthenticationProvider() {
        return new SAMLAuthenticationProvider();
    }

    @Bean
    public SAMLUserDetailsService samlUserDetailsService() {
        return new SAMLUserDetailsServiceImpl();
    }

    @Bean
    public SAMLConfigurer saml() {
        return new SAMLConfigurer();
    }

    @Bean
    public SAMLAuthenticationProvider samlAuthenticationProvider() {
        return new SAMLAuthenticationProvider();
    }

    @Bean
    public SAMLUserDetailsService samlUserDetailsService() {
        return new SAMLUserDetailsServiceImpl();
    }

    @Bean
    public SAMLConfigurer saml() {
        return new SAMLConfigurer();
    }

    @Bean
    public SAMLAuthenticationProvider samlAuthenticationProvider() {
        return new SAMLAuthenticationProvider();
    }

    @Bean
    public SAMLUserDetailsService samlUserDetailsService() {
        return new SAMLUserDetailsServiceImpl();
    }

    @Bean
    public SAMLConfigurer saml() {
        return new SAMLConfigurer();
    }

    @Bean
    public SAMLAuthenticationProvider samlAuthenticationProvider() {
        return new SAMLAuthenticationProvider();
    }

    @Bean
    public SAMLUserDetailsService samlUserDetailsService() {
        return new SAMLUserDetailsServiceImpl();
    }

    @Bean
    public SAMLConfigurer saml() {
        return new SAMLConfigurer();
    }

    @Bean
    public SAMLAuthenticationProvider samlAuthenticationProvider() {
        return new SAMLAuthenticationProvider();
    }

    @Bean
    public SAMLUserDetailsService samlUserDetailsService() {
        return new SAMLUserDetailsServiceImpl();
    }
}
  1. 在上述配置中,可以通过自定义的SAMLConfigurer类来配置samesite属性:
代码语言:txt
复制
private static class SAMLConfigurer extends SAMLConfigurerAdapter {
    @Override
    public void configure(HttpSecurity http) throws Exception {
        http
            .csrf().disable()
            .addFilterBefore(metadataGeneratorFilter(), ChannelProcessingFilter.class)
            .addFilterAfter(samlFilter(), BasicAuthenticationFilter.class)
            .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
            .rememberMe()
                .rememberMeServices(rememberMeServices())
                .and()
            .logout()
                .logoutSuccessUrl("/")
                .permitAll();
    }

    @Bean
    public SAMLRememberMeServices rememberMeServices() {
        SAMLRememberMeServices rememberMeServices = new SAMLRememberMeServices();
        rememberMeServices.setAlwaysRemember(true);
        rememberMeServices.setSamlAuthenticationProvider(samlAuthenticationProvider());
        return rememberMeServices;
    }
}

在上述配置中,通过rememberMeServices()方法设置了alwaysRemember属性为true,以确保在samesite属性为Lax时,Cookie仍然可以在跨站点请求中发送。

总结:Spring Security SAML与samesite=Lax是兼容的。通过在Spring Security配置中设置samesite属性的值,可以实现对SAML认证过程中的Cookie的samesite属性的控制。这样可以增强Web应用程序的安全性,防止跨站点请求伪造攻击。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Spring Security入门1:Spring Security定义用途

这有助于防止恶意行为和不当使用系统,本文讲解了安全性问题解决方案之一:Spring Security,探讨Spring Security定义用途。...Spring Security Spring 框架紧密集成,为Spring应用程序提供了全面的安全性功能。...具体来说,Spring SecuritySpring框架一个扩展模块,它利用了Spring依赖注入和面向切面编程等特性,可以Spring其他模块(如Spring MVC、Spring Boot...Spring Security利用了Spring框架AOP功能,通过切面编程实现了对安全性增强,它可以Spring框架中其他组件(如Spring MVC)无缝集成,实现对应用程序请求进行认证和授权...它可以各种标准 SSO 协议(如SAML、OAuth2)进行集成,实现跨应用程序用户认证和授权。

43740

Cookie 安全扫描问题修复

注意:需要使用 HCL AppScan Standard 这个版本,如果使用 IBM Security AppScan Standard 可能会存在扫描误报,测试下来是有这个现象,具体原因未知。...SameSiteChrome 浏览器在 51 版本之后,为 Cookie 新增属性,用来防止 CSRF 攻击和用户追踪。可以设置三个值:Strict、Lax、None。...Lax规则稍微放宽,导航到目标网址 Get 请求除外。NoneChrome 计划将Lax变为默认设置。这时,网站可以选择显式关闭SameSite属性,将其设为None。...Set-Cookie: key=value; SameSite=None; Secure了解了 Cookie 这些背景知识就知道如何找对应修复方法了。...proxy_cookie_path / "/; Secure; SameSite=Strict"; 会在 Response Set-Cookie 属性中补充 Secure 和 SameSite 数据。

35910

Spring SecurityCORSCSRF(三)

目录 跨域 JSONP CORS Spring Security启用CORS CSRF CSRF攻击过程 CSRF防御手段 使用Spring Security防御CSRF攻击 跨域 在之前文章[Spring...在学习Spring Security时候发现,Security框架也通过HttpSecurity进行链式配置解决跨域问题,是通过CORS进行解决,随意还是会重点讲解相关CORS。...Spring Security启用CORS Spring Security对CORS提供了非常好支持,只需在配置器中启用CORS支持,并编写一 个CORS配置源即可。...使用Spring Security防御CSRF攻击 CSRF攻击完全是基于浏览器进行,如果我们系统前端并非在浏览器中运作,就应当关闭CSRF。...在默认情况下,Spring Security加载是一个HttpSessionCsrfTokenRepository。

1.2K20

Spring Security 入门(一)Spring Security认证密码编码器

启动器,它包含了spring-security 相关所有依赖。...但通常应该Spring Framework 5.x任何新版本兼容。...SecurityAuthentication(认证) spring security提供了用于认证、授权和保护应用受到常见各种恶意攻击全面支持,同时也提供了第三方库集成,并简化了其应用。...PasswordEncoder典型使用场景是存储密码需要在用户认证时用户提供密码进行比对。...盐将以明文用户密码一起存储。然后,当用户尝试进行身份验证时,将把散列后密码存储散列和用户键入密码进行比较。惟一盐意味着彩虹表不再有效,因为每种盐和密码组合哈希值都不同。

1.2K30

【Django跨域】一篇文章彻底解决Django跨域问题!

# chrome升级到80版本之后,cookieSameSite属性默认值由None变为Lax # 也就是说允许同站点跨域 不同站点需要修改配置为 None(需要将Secure设置为True) #...需要前端后端部署在统一服务器下才可进行跨域cookie设置 ​ # 总结:需要设置 samesite = none、secure = True(代表安全环境 需要 localhost 或 HTTPS)...,你绑定域名 secure:HTTPS传输时应设置为true,默认为false httponly:值应用于http传输,这时JavaScript无法获取 SameSite属性详解 Lax Cookies...允许顶级导航一起发送,并将与第三方网站发起 GET 请求一起发送。...属性 SESSION_COOKIE_SAMESITE = 'None' SESSION_COOKIE_SAMESITE = 'Lax' SESSION_COOKIE_SAMESITE = 'Strict

4.4K31

前端安全防护:XSS、CSRF攻防策略实战

在本文中,我将深入剖析这两种攻击方式特点危害,介绍针对性防御策略,并通过代码示例演示如何在实际开发中有效实施这些防护措施。一、理解XSSCSRF攻击1....启用Content Security Policy (CSP)CSP是一种强大安全策略,它限制了浏览器可以加载哪些资源(如脚本、样式、图片等),从而有效防止XSS攻击。...使用SameSite Cookie属性设置SameSite属性为Lax或Strict,防止浏览器在跨站请求中携带相关Cookie,从而降低CSRF攻击可能性。...httpSet-Cookie: session=abc123; SameSite=Lax; Secure; HttpOnlyc....通过深入理解XSSCSRF攻击原理,结合输入验证、输出编码、启用CSP、使用Anti-CSRF Tokens、配置SameSite Cookie属性和强制HTTPS等策略,我们可以有效抵御这两种常见攻击

44010

深入解析CSRF漏洞:原理、攻击防御实践

SameSite Cookie属性设置CookieSameSite属性为Lax或Strict,可以有效防止跨站请求携带Cookie。特别是对于跨站GET请求,Lax模式就能提供很好保护。...httponly=True, samesite='Lax') return response五、实战代码演练攻击示例攻击者构建恶意页面HTML代码,诱导用户点击,发起转账请求:<!...Content Security Policy (CSP)通过设置严格Content Security Policy,限制页面加载资源能力,可以降低跨站脚本注入风险,间接减少CSRF攻击机会。...CSRFXSS关联及复合型攻击防范CSRFXSS内在联系虽然CSRF(跨站请求伪造)和XSS(跨站脚本攻击)是两种不同Web安全威胁,但它们之间存在着紧密联系。...SameSite Cookie属性:利用SameSite属性设置为“Lax”或“Strict”,限制第三方上下文中Cookie发送,进一步减小CSRF风险。

1.5K10

前端安全防护:XSS、CSRF攻防策略实战

在本文中,我将深入剖析这两种攻击方式特点危害,介绍针对性防御策略,并通过代码示例演示如何在实际开发中有效实施这些防护措施。 一、理解XSSCSRF攻击 1....使用SameSite Cookie属性 设置SameSite属性为Lax或Strict,防止浏览器在跨站请求中携带相关Cookie,从而降低CSRF攻击可能性。...http Set-Cookie: session=abc123; SameSite=Lax; Secure; HttpOnly c....通过深入理解XSSCSRF攻击原理,结合输入验证、输出编码、启用CSP、使用Anti-CSRF Tokens、配置SameSite Cookie属性和强制HTTPS等策略,我们可以有效抵御这两种常见攻击...作为博主,我将持续分享前端安全领域知识实践经验,助力广大开发者共建更安全网络环境。

26810

Spring Security 实战干货:微信小程序登录Spring Security结合思路分享

前言 原本打算把Spring Security中OAuth2.0机制讲完后,用小程序登录来实战一下,发现小程序登录流程和Spring Security中OAuth 2.0登录流程有点不一样,就把写了半天东西全部推翻了...小程序登录流程分析 小程序登录流程是这样: ? 微信小程序登录时序图 而在Spring SecurityOAuth 2.0 Code模式是这样: ?...Spring Security OAuth2.0 Code模式时序图 从这两张图上看最大差别就是微信小程序中获取code不需要通过后端服务器调用,而Spring Security中需要(第1步,第2...思路借鉴 ❝所有的猜想都没有错,而且我也实现了,但是改造成本过高了,写了很多兼容性代码,如果不深入Spring Security,很难实现这一点,而且也不好理解。...总结 本篇讲解了Spring Security和微信小程序登录相结合思路历程。

4.9K30

Spring Boot 2.6 正式发布,一大波新特性,看完我彻底躺平了。。

属性 现在可以使用 server.session.cookie.same-site 属性在 servlet 应用程序会话 cookie 上配置 SameSite 属性,这个适用于自动配置 Tomcat...server.session.cookie.same-site 支持三个配置: SameSite 参考值说明: None(关闭模式,必须同时设置 Secure) Lax(宽松模式,允许部分第三方 Cookie...如 Google 搜索响应头: 另外,如果你想将 SameSite 属性应用于其他 cookie,可以使用 CookieSameSiteSupplier 接口。...以前是在 spring.webflux.session 下,现在在 server.reactive.session 下,并且提供 servlet 版本相同属性。...10、依赖升级 官方项目升级到新版本: Spring Security 5.6 Spring Data 2021.1 Spring HATEOAS 1.4 Spring Kafka 2.8 Spring

2.6K10

Web开发安全

2.2.2 CSP CSP(Content Security Policy):内容安全策略 决定好哪些源(域名)是安全 来自安全源脚本可以执行,否则直接报错 对于 eval / inline script... SameSite 属性 Cookie SameSite 属性用来限制第三方 Cookie,从而减少安全风险。...比如访问别人项目网站时,有个 fork me 链接到 github,然后点击跳转不会带有 github token,所以跳转过后,都会是未登录状态 Lax:大多数情况不发送第三方 Cookie,但是导航到目标地址...Set-Cookie: CookieName=CookieValue; SameSite=Lax; 导航到目标地址 GET 请求:链接、预加载、GET 表单 设置了 Strict 或 Lax 之后...应用场景是依赖 Cookie 第三方服务:如网站内嵌其他网站播放器,开启 SameSite 属性后,就识别不了用户登录态,也就发不了弹幕了 2.2.5 SameSite 和 CORS 区别

89620
领券