c# - Asp.net WebForm - 请求之间的会话数据丢失,当在另一个域中构建 Web 应用程序(通过 Iframe)时
问题描述
问题:
当在另一个域中托管的另一个应用程序中构建 Web 应用程序(通过 Iframe)时,Asp.net WebForm 应用程序在任何请求之间丢失其会话数据(丢失 ASP.NET_SessionId cookie )。
我们的设置:
我们有 2 个应用程序 - 每个应用程序都托管在自己的域中(不是子域);第一个是 asp.net 网络表单(.Net 4.6.1)应用程序可以说 A,另一个应用程序(不在 .Net 上),可以说 B。
A(网络表单)正在从 B(非 .Net)的 iframe 中构建/打开。
详细问题
当 A 第一次在 B 内的 Bootstrap 弹出窗口(使用 iframe)中打开时,它会显示一个 aspx 页面。从那里,如果用户在 iframe 中执行任何操作,如果使用 iframe 向 A 本身发出另一个请求(回发或重定向),则先前的会话(内部 ASP.NET_SessionId 会话 cookie)将丢失并且新的会话/cookie 正在重新-创建。
这会破坏应用程序逻辑/行为,因为我们需要 A 的所有请求的活动会话。
尝试过的解决方案
我们将遵循以下之一(通过代码或 4.7.2 中可用的配置选项),并在 POC 级别尝试了一个,并且似乎修复了原始会话丢失问题。
从另一个域获取发布的数据时,ASP.NET 网络表单丢失会话
ASP.NET_SessionId cookie 值在 SameSite 中始终是松散的
我的查询
使用将 samesite 设置为 none 的选项以及要保护的 cookie(如果始终通过 https 访问应用程序 A)会导致任何额外的安全风险吗?- 如果 A 和 B 都归我们所有并在我们的域中。 如果是,涉及的风险是什么?可以推荐在生产盒中用于我们的设置吗?
我理解即使使用上述选项,当我们的应用程序 B在 chrome 的隐身窗口中打开并且 B 然后尝试在 iframe 中打开 A时,我们仍然会丢失会话数据?这是对的吗? 如果是,什么是解决方案/替代方案甚至解决方法(仅作为最后的手段)?我找到了一个,但建议使用 cookieless session,因为我们的身份验证是基于 cookie 的,所以我们不能这样做。
如果需要任何其他详细信息,请告诉我。谢谢你。
解决方案
推荐阅读
- java - Gradle Android“在模块栏中发现重复的类foo”错误
- javascript - 如何在角度中使用foreach获取数组中的数据
- java - 插入不应小于当前日期验证的数据
- c++ - 如何使用 CryptoApi 使用 AES-128 加密超过一个块大小的缓冲区
- dialogflow-es - conv.user.id 是未定义的,因此它不会将数据保留在对话流履行操作-on-google 中的 conv.user.storage 中。我该如何解决?
- sql - SQL - 将月份字符串“08-2019”转换为时间戳数据类型 - 01-08-2019
- asp.net - 当使用 UseSubmitBehavior 为 false 时,按钮在单击后消失
- angular - Angular ngFor 动态添加对象
- javascript - 使用 React hook 获取 Redux 存储实例
- sql - id有多个条件时的case表达式