快速的问题(如果已经被问过,很抱歉,我已经看过但找不到)。
我有一个 webforms 应用程序,它有一个包含 iframe 并提供 MVC 页面的页面。
我需要在 Web 应用程序中进行登录身份验证,并检查我们已通过身份验证的 MVC 应用程序(我确信有更好的方法,但遗憾的是它已经是这样了,改变它不是我的工作)。
我知道各种软糖可以使这项工作,但是有没有一种很好/正确的方法来实现这一点?
提前致谢
达兹
快速的问题(如果已经被问过,很抱歉,我已经看过但找不到)。
我有一个 webforms 应用程序,它有一个包含 iframe 并提供 MVC 页面的页面。
我需要在 Web 应用程序中进行登录身份验证,并检查我们已通过身份验证的 MVC 应用程序(我确信有更好的方法,但遗憾的是它已经是这样了,改变它不是我的工作)。
我知道各种软糖可以使这项工作,但是有没有一种很好/正确的方法来实现这一点?
提前致谢
达兹
假设 WebForms 和 MVC 应用程序位于不同的解决方案中,但部署到同一台服务器上,
确保您的身份验证机制使用 FormsAuthentication。
将 WebForms 和 MVC 应用程序放在同一个域上,即 example.com
编辑两个应用程序的 Web.config 并设置<system.web><machineKey>
为相同的值。您可以通过http://www.insitesystems.com/services/machine-key-generator.html生成机器密钥
- 或者 -
省略 web.config 的 machineKey 以从服务器上的父 web.config 或 machine.config 继承。(从未测试过这个)
使用相同的<membership>
和<authentication>
设置。拥有相同的会员设置允许您从两个应用程序登录,因为用户的密码存储在同一个数据库中。具有相同的身份验证设置可确保提交相同的身份验证 cookie,无论它是发送到 WebForms 还是 MVC
将以下内容添加到您的 MVC 控制器以输出 P3P 标头以强制 IE 接受 IFRAME 内的 cookie。请自定义该值,因为您的隐私政策很可能与我的不同。有关详细信息,请参见http://www.p3pwriter.com/LRN_111.asp。(或者,将它放在一个基础 Controller 类中并从所有控制器继承它。)
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
filterContext.HttpContext.Response.AddHeader("P3P", @"CP=""CAO PSD OUR CUR""");
base.OnActionExecuted(filterContext);
}
编辑
第二个想法,不需要第 5 步,因为主文档和 iframe 都来自同一个域。因此,cookie 应被视为第一方,而不是第三方(被 IE 阻止)。