每当我尝试访问(仅读取)网络共享“\\ 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。
答案 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); %>
要访问网络共享,上述用户需要是网络管理员设置的域帐户。