由cookie SameSite引起的坑

发布时间:2019-11-27 23:03:23阅读:(1532)

最近有个项目需要嵌入在另一个系统的iframe中运行,但是一旦运行在iframe中,就出现用户无法登录的象限。系统后台采用Spring boot+Spring Security进行鉴权,用户登录后会写入一个session的cookie,但是当页面第二次请求时,会发现cookie并没有携带在请求上,最后查找了一些资料,发现是cookie的SameSite属性在搞鬼。

上图是用户登录时,Spring写入的cookie,我们发现最后一个SameSite属性值为Lax。参考相关文档(https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#Syntax),SameSite的属性可以为Strict,Lax,None。

Strict为严格模式,在跨域时,任何情况下都不会发送Cookie,Lax稍微宽松些,但大部分情况也不会发送底三方的Cookie,因此需要再跨域的情况下能正常读取cookie,需要将SameSite属性设置为None。

以下是在Spring boot下的设置方式:

@Bean
public CookieSerializer httpSessionIdResolver(){
DefaultCookieSerializer cookieSerializer = new DefaultCookieSerializer();
cookieSerializer.setSameSite(null);
return cookieSerializer;
}

再次运行项目,查看控制台发现SESSION的SameSite属性没了,用户终于可以正常登陆了

发表评论

评论列表(有2条评论1532人围观)
.2020-10-11 16:30:24

setSameSite爆红了,这是哪个依赖的哇

凌杰2020-10-18 17:15:21

sameSite是spring-session 2.1版本后加的属性,如果没有这个属性,要么升级一下jar包,要么自己实现一下CookieSerializer这个接口