快速提问(对不起,如果已经被问过,我看过但是找不到它)。
我有一个webforms应用程序,其中包含一个包含iframe的页面并提供MVC页面。
我需要在网络应用程序中进行登录身份验证,并检查我们经过身份验证的MVC应用程序(我确定有更好的方法,但遗憾的是它已经是这样,它'不是我的工作来改变它。)
我知道各种各样的软糖可以使这项工作,但有一个很好/正确的方法来实现这一目标吗?
提前致谢
哈根达斯
答案 0 :(得分:2)
假设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>
设置。拥有相同的成员资格设置允许您从两个应用程序登录,因为用户的密码存储在同一个数据库中。具有相同的身份验证设置可确保无论是否将其发送到WebForms或MVC,都会提交相同的身份验证Cookie
将以下内容添加到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阻止)。