javascript - 当我的应用程序在 iframe 中时,如何在我的域中设置一个 cookie,以便我可以在客户端打开我的应用程序时访问它抛出我的域?
问题描述
我有一个托管在域上的 Angular 应用程序"ourDomain"
,它将位于托管在"clientDomain"
.
我正在尝试在我的域中设置一个 cookie,但我收到以下警告,阻止将 cookie 保存在浏览器控制台中:
在“ourDomain”中设置了与跨站点资源关联的 cookie,但未设置该SameSite
属性。SameSite=None
它已被阻止,因为 Chrome 现在仅在使用和设置时才提供带有跨站点请求的 cookie Secure
。
我尝试使用此库 https://www.npmjs.com/package/ngx-cookie-service设置 cookie ,并在设置 cookie 时设置域名,如下所示:
cookieService.set('key', 'value', 2, '/', 'ourDomain', true, 'Lax');
我还尝试使用包含的标头对我的 spring API 进行 REST 调用{withCredentials: true}
并且响应头包含
Cookie cookie = new Cookie("username", req.getHeader("Origin"));
cookie.setMaxAge(2 * 24 * 60 * 60); // expires in 2 days
cookie.setSecure(true);
cookie.setPath("/");
cookie.setHttpOnly(true);
cookie.setDomain("dev.siliconexpert.com");
response.addCookie(cookie);
response.setHeader("Access-Control-Allow-Origin", "ourDomain");
response.setHeader("Access-Control-Allow-Methods", "POST");
response.setHeader("Access-Control-Allow-Credentials", "true");
但不幸的是,我仍然收到同样的警告。
那么我的解决方案有问题吗?或者,是否有另一种解决方案来完成这项工作?
解决方案
如果您的站点在iframe
不同站点上运行,则意味着其所有 cookie 都在第三方或跨站点上下文中。因此,随着 Chrome、Firefox 和 Edge 即将发生的变化,这些 cookie 将需要标记为SameSite=None; Secure
.
该ngx-cookie-service
库不支持新None
值,目前正在寻找新的维护者,因此不太可能很快更新。但是,查看您提供的服务器端代码,这看起来是另外一回事。
要么使用您的服务器端库添加Secure
属性和SameSite
带有None
值的属性,要么使用SetHeader()
方法自己编写Set-Cookie
标头。
您可以在https://web.dev/samesite-cookies-explained找到更多上下文,并在https://github.com/GoogleChromeLabs/samesite-examples上找到一些示例
推荐阅读
- reactjs - 在 Firebase 中注册后将用户信息保存到数据库中
- while-loop - 如何从 ansible 读取文件并让它返回最后几行?
- requirements - 是否需要 OfficeOpenXML
- react-native-ios - 如何在反应本机ios webview中加载本地文件
- laravel - Laravel - 当我尝试重置密码时,我不断收到“此密码重置令牌无效”
- azure - 逻辑应用程序 Json 不是数组
- python - 从熊猫系列中提取 pos_tag_sents
- ios - 无法将框架中包含的 Swift 4.2 类访问到 Objective C 项目中
- java - 如何在 java 中使用 Windows 凭据自动登录?
- simulation - 为什么我的第一个铜结构 QUIP 模拟不起作用?