【问题标题】:Authentication of MVC app inside a web forms (iframe)在 Web 表单 (iframe) 中验证 MVC 应用程序
【发布时间】:2012-06-21 13:13:19
【问题描述】:

快速提问(抱歉,如果已经有人问过,我已经看过但找不到)。

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

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

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

提前致谢

达兹

【问题讨论】:

  • WebForms 应用程序和 MVC 应用程序是否从同一个域提供?如果它是相同的,你很幸运。
  • 它们可能是,我们还没有设置它的 MVC 方面,这是我们刚刚从 Web 表单迁移到的东西,所以我看不出我们为什么不能这样做,如果他们愿意的话两人在同一个领域幸福地生活。

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


【解决方案1】:

假设 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 阻止)。

【讨论】:

  • 非常感谢,我今天会尝试一下,让你知道:)
  • 酷,我已经通过制作一个测试 web 表单应用程序和一个测试 mvc 应用程序来尝试这个,按照你说的做,在我的 web 表单中添加一个 iframe 并提供我的 MVC,它很有效非常感谢,你肯定会在那里打勾:) 但是..我已经在我们的实际应用程序中尝试过,但没有,但在我们的实际应用程序中,Web 表单应用程序是 IIS,MVC 是 cassini,所以我想如果我抛出他们都在 IIS 我们应该很酷??? (你回答了我的问题并为我解决了问题,所以你仍然得到我的提示:))
  • 最终更新...让它们现在都在 IIS 中工作,只是为了记录,第 3 步,当我遗漏机器密钥时它不起作用,所以你需要这个。再次非常感谢您的帮助:)
  • 欢迎 =)。是否不需要第 5 步确认?
  • 我还不知道.. 到目前为止我只在 chrome 中测试过,我认为这只是 IE 的问题(也许)??
猜你喜欢
  • 1970-01-01
  • 2011-06-07
  • 1970-01-01
  • 2017-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多