IIS 7.5上的MVC 3应用程序中的模拟和委派

时间:2012-01-11 16:41:52

标签: asp.net-mvc-3 iis-7.5 impersonation delegation

鉴于以下情况:

  • 带有IIS 7.5的Windows 2008 R2 x64 Web服务器,服务器1
  • Windows 2003 R2 x64文件服务器,服务器2
  • 使用Windows身份验证和模拟的MVC 3应用程序 (经过身份验证的用户)
  • 在Active中将服务器1 配置为'Trusted computer for delegation' 目录
  • Internet Explorer 8

在应用程序中,用户可以上传文件。此上传的文件必须保存在 Server 2 上。在代码中,我们创建了 Server 2 的UNC路径并将其保存在那里。

public ActionResult Upload(HttpPostedFileBase file)
{
  var savedDirectory = "\\Path\To\Server2";

  if (Directory.Exists(savedDirectory))
  {
    file.SaveAs(savedFileName);
  }
  else
  {
    Directory.CreateDirectory(savedDirectory);
    file.SaveAs(savedFileName);
  }

  return RedirectToAction("Action", "Controller", new { id = 1 });
}

我们在服务器1 上安装了应用程序并在服务器1 上进行本地测试,一切都很顺利。文件上传到服务器2 没有问题。

当我们从客户端桌面测试相同的方案时,我们收到一条错误消息,指出没有足够的权限将文件保存在 Server 2 上。

wireshark会话显示服务器1 未模拟,因为服务器2 上经过身份验证的用户为空/匿名。

模拟为特定用户而非经过身份验证的用户

我们没有让模拟工作,所以我们创建了一个服务帐户,并将应用程序配置为使用此Specific User代替Authenticated User进行模拟。该服务帐户是一个域帐户,对 Server 2 上的文件夹具有权限。

当我们尝试上传时,服务帐户对我们上传文件的本地文件夹没有任何权限。

我们通过Impersonation in asp.net mvc了解到,我们需要信任服务器1 进行委派。

在我们信任服务器1 进行委派之后:仍无权将文件保存在服务器2 上。我们尝试将此模拟为Authenticated User en Specific user

  1. 假冒为Authenticated User且委派无效:对服务器2的权限不足
  2. 模拟Specific User无法正常工作:对本地文件夹
  3. 的权限不足

    我们在这里错过了什么吗?我们是否需要额外的授权步骤?

2 个答案:

答案 0 :(得分:1)

我们通过以下方式解决了这个问题:

  1. 在服务器1的域上配置委派
  2. Kerberos provider添加到IIS中的应用程序(右键单击Windows身份验证)

答案 1 :(得分:0)

我今天遇到了这个错误,以下是我为解决问题所采取的措施:

  1. 确保为您的网站启用了ASP.NET模拟。在IIS管理器中转到您的站点,然后在功能下双击身份验证,然后启用ASP.NET模拟
  2. 为您的应用池使用集成模式
  3. 编辑应用程序的web.config文件以指定以下设置:

    <system.webServer>
      <validation validateIntegratedModeConfiguration="false" />
      <modules runAllManagedModulesForAllRequests="true" /> 
    </system.webServer>