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

我用在网站上的身份验证形式,并且不基于窗口。

所以我的问题是,当我尝试使用下面的代码来读取networkshare任何文件,它抛出访问被拒绝 DirectoryInfo的networkShare =新的DirectoryInfo( “\\ TESTSERVER \共享”);

所以我试图用假冒提供的网络共享的用户名和密码来冒充函数调用,但是通话明显,因为该用户名没有在ASP.NET Web服务器存在失败。于是我通过了,它在Web服务器上存在的登录用户名和密码,所以这个时候冒充调用工作但它仍然无法访问网络共享“因为网络共享用户名和密码是不同的。

因此,最后,我创建在其上匹配网络共享的网络服务器完全相同的用户名/密码。这一次冒充函数调用的工作原理也是如此网络共享。我能够从共享成功读取。

所以我的问题是,有没有一种方法,我可以读取网络共享,而不在Web服务器添加的用户名。 “因为每次网络共享登录的变化,我不得不再次使web服务器一个新的用户名了。这是不理想的。

任何想法?

有帮助吗?

解决方案

“正确”的方式做,这是运行Web服务器的应用程序池为可以访问共享的身份。这样的话,唯一的凭据存储在IIS配置安全解决(而不是在你的代码或读取配置文件)。把在同一个Windows域(或信任不同的域)的网络服务器和文件服务器是最简单的方式,但“相同的用户名/密码”的事情应该工作有作为。

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

其他提示

尝试此

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

request.GetResponse();
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top