0

我开发了一个必须访问 SharePoint 远程文件夹的 ASP.NET MVC 3。

为此,在开发过程中,在运行 Visual Studio 开发服务器之前,我尝试访问远程文件夹。然后,我必须介绍有权查看远程资源的用户的凭据。在此之后,使用以下代码:

string path = @"\\tests.sharepoint.es\folder1";
DirectoryInfo di = new DirectoryInfo(path);
DirectoryInfo[] dis = di.GetDirectories();

文件夹访问成功。但是,当我从 IIS 执行我的 Web 应用程序时,这会失败,出现下一个错误:

拒绝访问路径“\tests.sharepoint.es\folder1\”。

即使我为应用程序池设置了运行 Visual Studio 开发服务器的同一用户,它仍然会失败。

我已经确定运行万维网发布服务 (W3SVC) 的用户是 SYSTEM(一个显然无权访问该文件夹的帐户),但我无法更改这一点,我不确定这是否会导致问题。

另外,我已经阅读了一些关于使用SPSecurity.RunWithElevatedPrivileges的帖子,但我不能使用它,因为我的 IIS 服务器没有安装 Sharepoint(它在另一台机器上),因此我不能使用 Microsoft.Sharepoint.dll 作为据我所知。

更新:当我尝试使用 Windows 资源管理器访问资源时,我读到操作系统使用 WebDav 而不是 NetBios。IIS 可以使用此协议访问资源吗?

4

2 回答 2

0

幸运的是,我找到了解决访问问题的方法。

我已经使用了这篇文章中描述的解决方案。

我的代码看起来像这样:

PinvokeWindowsNetworking.connectToRemote(@"\\tests.sharepoint.es\folder1", "domain\user", "password");
//manage files and folders of my remote resource
//...
PinvokeWindowsNetworking.disconnectRemote(@"\\tests.sharepoint.es\folder1");
于 2013-09-23T15:04:17.363 回答
0

如果您确实需要从 Windows Web 服务器(或任何其他模拟远程客户端的服务器)访问具有 Windows 权限的远程资源,则必须在直接登录服务器框的帐户下运行此类代码。这是由“NTLM 单跳”策略引起的 - 用户的凭据只能在直接登录的机器用户或直接与之通信的机器用户上使用(而不是在第二台机器尝试连接的第三台机器上)。

最安全的方法是在有权访问远程资源的帐户下运行进程并在该进程中运行代码。您可以在此类帐户下运行 IIS 进程,但如果在请求期间运行代码,您可能需要将模拟恢复为进程。

您也可以直接模拟特定用户,但您需要有纯文本登录信息。这很可能违反大多数公司的安全策略。

注意:您很可能最终会构建匿名代理 - 请非常小心地了解在与实际用户帐户不同的帐户下访问远程资源的含义。

于 2013-09-13T16:04:45.317 回答