我有一个 ASP.NET Web 应用程序试图读取与模拟用户的远程共享。具体来说,我正在尝试使用以下代码来读取远程共享上的目录..
DirectoryInfo rootDir = new DirectoryInfo(strPath);
foreach (DirectoryInfo dir in rootDir.EnumerateDirectories())
{
TreeNode folderNode = new TreeNode(dir.Name, dir.FullName);
folderNode.PopulateOnDemand = true;
folderNode.ImageUrl = "~/img/Folder.png";
nodeList.Add(folderNode);
}
当网页运行此代码时,我收到以下错误消息...
拒绝访问路径“\remoteserver\remoteshare\”。
这是我的 web.config ...
<authentication mode="Windows"/>
<identity impersonate="true" />
<authorization>
<deny users="?"/>
</authorization>
当我登录网站时,我知道模拟正在工作,因为我可以执行 HttpContext.Current.User.Identity.Name 并查看我的用户名。我在 IIS 7.5 下的域上运行此应用程序。我也知道这不可能是 Kerberos“双跳”问题,因为我可以连接到远程 SQL 服务器(从 Web 服务器)并通过 Windows Authenticated 凭据并返回查询结果。
我在 Web 服务器上使用Process Monitor来确定哪些凭据被传递到远程共享。当我查看显示 ACCESS DENIED 的捕获时,它给了我这个描述......
所需访问权限:读取数据/列表目录、同步、处置:打开、选项:目录、同步 IO 非警报、打开以供备份、属性:不适用、共享模式:读取、写入、删除、分配大小:不适用、模拟: 域\用户名
其中 DOMAIN\username 是我从 Web 服务器模拟的用户名。
Process Monitor 还显示 NT AUTHORITY\NETWORK SERVICE 是发出请求的 Web 服务器上的用户,这让我认为 Web 服务器实际上不是通过模拟用户来读取远程文件共享。这几乎就像专门针对远程文件共享访问存在“双跳”问题一样。
我还将 Web 服务器配置为“信任此计算机以委托给任何服务(仅限 Kerberos)”。同样,如果我可以从 Web 服务器访问远程 SQL 服务器,这不会是双跳问题,或者可以吗?任何帮助或指示将不胜感激,我花了 2 天时间寻找可能的解决方案,但没有任何效果。