将凭据传递给ASP.NET 4.0中的File.Move()& IIS7

时间:2014-12-19 13:29:41

标签: c# asp.net iis-7

我有一个在IIS7上运行的asp.net Web应用程序,它的AppPool标识设置为" NETWORK SERVICE"和管理的管道模式=经典。

web.config包含以下安全设置......

<system.web>
    <identity impersonate="true"/>
    <authentication mode="Windows" />
</system.web>

Web应用程序从第三方下载数据并在Web应用程序服务器上创建文件。然后通过此命令将这些文件传输到另一台服务器。

  System.IO.File.Move(sourcePathAndFilename, destinationPathAndFileName);

当我作为高级用户从服务器运行应用程序时,它工作正常。 当我从客户端计算机上以任何用户身份运行应用程序时,它会失败。 当我从服务器上以低级授权用户身份运行应用程序时,它失败了。

错误是HTTP 401未经授权的访问。

我100%肯定用户&amp; NETWORK SERVICE对源文件夹和目标文件夹都有足够的权限。因此,似乎File.Move()命令正在执行其他内容,但是谁/什么?

在不更改AppPool设置的情况下,Web应用程序是否有办法将用户凭据传递给File.Move()命令?

1 个答案:

答案 0 :(得分:1)

您可以在this问题

中找到所需内容的精彩实现

在使用使用参数添加特定类后,您可以执行File.Move

只需

using (new NetworkConnection(@"\\server\path", Credentials)) {
   System.IO.File.Move(sourcePathAndFilename, destinationPathAndFileName);
}