2

快速的问题(如果已经被问过,很抱歉,我已经看过但找不到)。

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

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

我知道各种软糖可以使这项工作,但是有没有一种很好/正确的方法来实现这一点?

提前致谢

达兹

4

1 回答 1

3

假设 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>设置。拥有相同的会员设置允许您从两个应用程序登录,因为用户的密码存储在同一个数据库中。具有相同的身份验证设置可确保提交相同的身份验证 cookie,无论它是发送到 WebForms 还是 MVC

  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);
    }
    

编辑

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

于 2012-06-19T15:17:44.613 回答