在Web表单(iframe)中验证MVC应用程序

时间:2012-06-19 13:26:55

标签: asp.net-mvc-3 authentication iframe webforms

快速提问(对不起,如果已经被问过,我看过但是找不到它)。

我有一个webforms应用程序,其中包含一个包含iframe的页面并提供MVC页面。

我需要在网络应用程序中进行登录身份验证,并检查我们经过身份验证的MVC应用程序(我确定有更好的方法,但遗憾的是它已经是这样,它'不是我的工作来改变它。)

我知道各种各样的软糖可以使这项工作,但有一个很好/正确的方法来实现这一目标吗?

提前致谢

哈根达斯

1 个答案:

答案 0 :(得分:2)

假设WebForms和MVC应用程序位于不同的解决方案中,但部署到同一服务器上,

  1. 确保您的身份验证机制正在使用FormsAuthentication。

  2. 将WebForms和MVC应用程序放在同一个域上,即example.com

  3. 编辑两个应用的Web.config并将<system.web><machineKey>设置为相同的值。您可以通过http://www.insitesystems.com/services/machine-key-generator.html

    生成机器密钥

    - 或 -

    将web.config的machineKey从服务器上的父web.config或machine.config中继承。 (从未测试过这个)

  4. 使用相同的<membership><authentication>设置。拥有相同的成员资格设置允许您从两个应用程序登录,因为用户的密码存储在同一个数据库中。具有相同的身份验证设置可确保无论是否将其发送到WebForms或MVC,都会提交相同的身份验证Cookie

  5. 将以下内容添加到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);
    }
    
  6. 修改

    第二个想法,不需要第5步,因为主文档和iframe都来自同一个域。因此,cookie应被视为第一方,而不是第三方(被IE阻止)。