C#3.5 ASP.net文件IO问题,UnauthorizedAccessException到网络共享上的文件

时间:2009-05-05 16:20:18

标签: c# asp.net visual-studio-2008 security file-io

每当我尝试访问(仅读取)网络共享“\\ server \ folder1 \ folder2 \ file.pdf”上的文件时,我就会收到UnauthorizedAccessException。

我正在冒充已读取&的域\ aspnet用户写访问上述文件夹。该文件不是只读的。

我尝试通过System.Security.Permissions.FileIOPermission查找权限。它只是说NoAccess所有文件。

我不确定我还能做什么。

我在Framework 3.5,WinXP,IIS 5.1上使用Visual Studio 2008,ASP.net 2.0。

5 个答案:

答案 0 :(得分:3)

ASP.NET用户无法使用网络路径。所以你需要有一个Windows帐户 将拥有所有权利,然后你需要在web.config中使用imposernate的东西,如下所示。

<identity impersonate="true" userName="domainname\windowuseraccount" password="password"/>

答案 1 :(得分:3)

我假设您已正确设置了模拟。您已关闭匿名访问,将身份验证模式设置为Windows并将模拟设置为true等。

即使完成所有操作并且正确的帐户模拟,您仍然无法访问该文件。被模拟的帐户正在使用所谓的网络凭据。这些仅在模拟正在进行的机器上有效。当您尝试访问计算机本身的文件时,将使用用户的凭据执行访问,但对于共享上的文件,访问将以未经身份验证的用户身份执行,因此不允许访问。

为了允许您使用用户的凭据进行远程工作,即访问共享,远程数据库的集成安全性等,您需要使用委派而不是模拟。这是一个涉及Active Directory设置和IIS配置的有点复杂的主题。看看this article,它应该为你提供一个好的起点。

答案 2 :(得分:0)

确保域用户具有安全权限共享权限。也就是说,在共享文件夹中,在属性中的“共享”选项卡下以及“安全”选项卡下添加域用户。

答案 3 :(得分:0)

您使用的是什么IIS版本?如果是版本6,则可以将Web应用程序放在其自己的应用程序池中,然后将该应用程序池的标识设置为域用户帐户。然后,授予该域用户帐户访问网络共享的权限。

答案 4 :(得分:0)

仅供参考,您可以将以下内容放入aspx文件中,以验证您的网页运行的标识:

<%@ Page Language="C#" %>
<% Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name); %>

要访问网络共享,上述用户需要是网络管理员设置的域帐户。