Spring security 6 同站点问题

问题描述 投票:0回答:1

我正在尝试将 Spring Security saml 与 Spring Boot 3 和 Spring Security 6 一起使用。 我有一个在单独域中运行的 UI 服务,它需要使用 SAML 服务进行身份验证。

不幸的是,即使在为新域指定 @CrossSite 属性后,域也不同,因此在身份验证后,会话 cookie 不会作为 UI 服务的 API 调用的一部分发送。

我尝试在 SameSite Bean 下面进行设置,但它不起作用。

重现步骤:

例如,请考虑以下 SAML 服务的 Spring Security 示例
SAML 服务 -> https://github.com/spring-projects/spring-security-samples/tree/6.3.x/servlet/spring-boot/java/saml2/login

在上述服务中添加一个额外的 API,该 API 在会话有效时起作用。

添加一个简单的 React 应用程序(npm create react app)并添加 axios 调用以从上面的新 api 获取一些 API 响应。 调用这个 axios 并从会话中获取响应。

此示例适用于同一域。 Spring security 和 React 应用程序都位于与 localhost 相同的域中。 如果我们将 spring 安全域更改为不同的主机名(在主机文件下)并尝试相同的操作,则会失败。

在SecurityConfig.java中添加了以下配置

我尝试为同一站点设置以下 bean,但它不起作用,尝试了所有 Lax、None、Null: (形成本文https://jstobigdata.com/spring-security/controlling-sessions-with-spring-security/

@Bean
    public CookieSerializer cookieSerializer() {
        DefaultCookieSerializer serializer = new DefaultCookieSerializer();
        serializer.setCookieName("JSESSIONID");
        serializer.setCookiePath("/");
        serializer.setUseSecureCookie(true);
        serializer.setSameSite("Strict"); // default is Lax
        serializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$");
        return serializer;
    }

在一个选项卡中登录 Spring Security 项目,然后在另一个选项卡中打开 React 应用程序。 检查两个应用程序中域名相同和不同时的差异。

spring spring-boot spring-security saml okta
1个回答
0
投票
出于安全原因,

会话 cookie 应标记为

SameSite
,这意味着浏览器不会将其附加到发送到另一个域的请求。您无法通过 CORS 配置更改此行为。

在 UI 和后端前面放置一个反向代理。这样,从浏览器的角度来看,所有请求都将以该反向代理为源。

© www.soinside.com 2019 - 2024. All rights reserved.