2009-09-30 84 views
0

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

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

所以我的问题是,当我尝试使用下面的代码从networkshare中读取任何文件时,它会抛出访问被拒绝的错误信息 DirectoryInfo networkShare = new DirectoryInfo(“\\ TestServer \ Share”);

所以我尝试使用模拟器提供网络共享的用户名和密码到impersonate函数调用,但是调用显然失败,因为该用户名不存在于ASP.NET Web服务器上。因此,我传递了Web服务器上存在的登录名的用户名和密码,所以这次impersonate调用可以工作,但它仍然无法访问网络共享,因为网络共享用户名和密码不同。

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

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

任何想法?

回答

2

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

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

+0

因此,我们需要在两台服务器上都有理想的用户名/密码,对吧?我正在寻找一些不需要我在Web服务器上创建用户名的东西。谢谢。 顺便说一句,我的网络共享是在FEDORA而不是Windows服务器,不知道这是否有任何区别。 – ace 2009-09-30 05:26:18

+0

对不起,你原来的帖子并不清楚 - 如果你不关心存储其他服务器的用户名/密码,我添加了一些应该工作的东西。 – nitzmahone 2009-09-30 17:07:05

+0

哇...看起来像我的问题的解决方案...我会尝试让你知道它是否工作。感谢的人... 我想加密网络登录和存储在数据库服务器上,所以我想它应该没问题。 – ace 2009-10-01 02:42:36

0

试试这个

WebRequest request = WebRequest.Create("http://server/file.xml"); 
request.PreAuthenticate = true; 
request.Credentials = new NetworkCredential("user", "pass"); 

request.GetResponse(); 
+0

我需要从网络共享文件夹中获取所有文件的列表,并将所有文件复制到网络服务器,这将有可能与上述aproach?谢谢。 – ace 2009-09-30 05:22:54

相关问题