我有一个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非警报,打开备份,属性:不适用,ShareMode:读取,写入,删除,分配大小:n / a,模拟:DOMAIN \用户名
其中DOMAIN \ username是我从Web服务器模拟的用户名。
进程监视器还显示NT AUTHORITY \ NETWORK SERVICE是发出请求的Web服务器上的用户,这使我认为Web服务器实际上并不是通过模拟用户来读取远程服务器文件共享。这几乎就像特别是远程文件共享访问存在“双跳”问题一样。
我还将Web服务器配置为“信任此计算机以便委派任何服务(仅限Kerberos)”。同样,如果我可以从Web服务器访问远程SQL服务器,这可能不是双跳问题,或者可以吗?任何帮助或指示将不胜感激,我花了2天时间寻找可能的解决方案,没有任何作用。