ASP.NET 从受密码保护的网络共享中读取文件

Posted

技术标签:

【中文标题】ASP.NET 从受密码保护的网络共享中读取文件【英文标题】:ASP.NET Read Files from a Password Protected Network Share 【发布时间】:2010-12-02 12:52:35 【问题描述】:

我在 Windows 2003 Server 上有一个 ASP.NET 网站,它需要从网络共享访问文件。网络共享受密码保护,需要提供用户名和密码。

我在网站上使用基于表单的身份验证,而不是基于 Windows。

所以我的问题是,当我尝试使用下面的代码从网络共享读取任何文件时,它会抛出拒绝访问 DirectoryInfo networkShare = new DirectoryInfo("\\TestServer\Share");

所以我尝试通过向模拟函数调用提供网络共享的用户名和密码来使用模拟,但是调用显然失败了,因为该用户名在 ASP.NET 网络服务器上不存在。然后我传递了网络服务器上确实存在的登录名的用户名和密码,所以这次模拟调用有效,但它仍然无法访问网络共享,因为网络共享用户名和密码不同。

最后,我在与网络共享匹配的网络服务器上创建了完全相同的用户名/密码。这次模拟函数调用有效,网络共享也有效。我能够成功地从共享中读取。

所以我的问题是,有没有一种方法可以读取网络共享,而无需在网络服务器中添加用户名。 '因为每次网络共享登录更改时,我都必须再次在网络服务器中创建一个新用户名。这并不理想。

有什么想法吗?

【问题讨论】:

【参考方案1】:

执行此操作的“正确”方法是将网络服务器的 AppPool 作为可以访问共享的身份运行。这样,唯一的凭证存储是在 IIS 配置中安全完成的(而不是在您的代码或可读配置文件中)。将网络服务器和文件服务器放在同一个 Windows 域(或具有信任的不同域)中是最简单的方法,但“相同的用户名/密码”也应该在那里工作。

如果您不关心将用户名/密码放入您的代码或配置中,您可以 P/Invoke 到 WNetAddConnection2 并传递用户名/密码 - 那么您应该能够访问共享。这不需要网络服务器有匹配的帐户,但您确实应该保护密码(查看 System.Security.Cryptography.ProtectedData 以获取加密的注册表存储)。

【讨论】:

所以我们需要在两台服务器上都有相同的用户名/密码,对吧?我正在寻找不需要我在网络服务器上创建用户名的东西。谢谢。顺便说一句,我的网络共享在 FEDORA 而不是 Windows 服务器上,不确定这是否有什么不同。 抱歉,您的原始帖子不清楚 - 如果您不关心存储其他服务器的用户名/密码,我在上面添加了一些应该可以工作的内容。 哇...看起来我的问题的解决方案...我会尝试让您知道它是否有效。谢谢伙计...我正在考虑加密网络登录并存储在数据库服务器上,所以我想应该没问题。

以上是关于ASP.NET 从受密码保护的网络共享中读取文件的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET访问网络映射盘&实现文件上传读取功能

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

如何从受保护的文件夹中使用PHP和AJAX提供安全的文件下载?

UOS免密访问windows共享文件夹

请问一下关于asp.net修改密码的问题

ASP.NET上传图片到共享文件夹内