【发布时间】:2021-08-21 14:12:04
【问题描述】:
我是一名前端开发人员,正在开发一个应用程序,其中login/ 响应在客户端上放置了一个 Session-Cookie。由于用户“登录”,以后的请求将被授权。
从 Chrome 80 开始
所有没有 SameSite 属性的 cookie 都将被视为指定了 SameSite=Lax。换句话说,它们将仅限于第一方(同一域上的服务器和客户端)。
如果您需要第三方 cookie(服务器和客户端在不同的域上),那么它们必须标有SameSite=None。
默认限制为第一方
Set-Cookie: cname=cvalue; SameSite=Lax
在第三方环境中允许
Set-Cookie: cname=cvalue; SameSite=None; Secure
对于我的应用程序,我想要默认行为。我的客户端和服务器在 生产 中的同一域上运行。但在开发中,我在localhost(不同的域)工作。
到目前为止,chrome 在chrome://flags 下有特殊标志 - SameSite by default cookie。我可以在我的开发机器上启用这个标志并且登录通过了。在生产中,我不需要这个标志,因为我想要默认行为。
从 Chrome 91 开始
SameSite by default cookie 标志已被移除。这意味着从这个版本开始,如果不将其部署到生产环境,我将无法登录我的应用程序。
有谁知道我在本地工作时如何获取 Session-Cookie。但仍然保持SameSite=Lax 的安全性。如果可能,仅对客户端进行更改,但如果需要,也对服务器进行更改。
Chrome DevTools - SameSite 错误消息
Chrome 80 标志菜单 - 这些标志已在 Chrome 91 中删除
更新
我试图通过让服务器使用SameSite=None(仅限开发)来解决这个问题。
这会导致另一个错误:Connection isn't secure。这是因为在使用SameSite=None 时,您需要添加后缀Secure,并且诅咒使用HTTPS 连接。
安全连接有其自身的问题,例如必须为开发中的证书付费。
【问题讨论】:
-
您是否尝试过将此标志
chrome://flags/#schemeful-same-site设置为Disabled?
标签: google-chrome cookies session-cookies samesite