首页 > 解决方案 > 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 中始终是松散的

我的查询

  1. 使用将 samesite 设置为 none 的选项以及要保护的 cookie(如果始终通过 https 访问应用程序 A)会导致任何额外的安全风险吗?- 如果 A 和 B 都归我们所有并在我们的域中。 如果是,涉及的风险是什么?可以推荐在生产盒中用于我们的设置吗?

  2. 我理解即使使用上述选项,当我们的应用程序 B在 chrome 的隐身窗口中打开并且 B 然后尝试在 iframe 中打开 A时,我们仍然会丢失会话数据?这是对的吗? 如果是,什么是解决方案/替代方案甚至解决方法(仅作为最后的手段)?我找到了一个,但建议使用 cookieless session,因为我们的身份验证是基于 cookie 的,所以我们不能这样做。

如果需要任何其他详细信息,请告诉我。谢谢你。

标签: c#asp.netsecurityiframecross-domain

解决方案


推荐阅读