0

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

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

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

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

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

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

有任何想法吗?

4

1 回答 1

2

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

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

于 2009-09-30T04:32:07.657 回答