2009-09-30 6 views
0

У меня есть веб-сайт ASP.NET на сервере Windows 2003 Server, которому необходимо получить доступ к файлам из общего сетевого ресурса. Сетевой ресурс защищен паролем и ему необходимо указать имя пользователя и пароль.ASP.NET Чтение файлов из защищенной паролем сети

Я использую аутентификацию на основе форм на веб-сайте, а не на основе окон.

Так что моя проблема в том, что когда я пытаюсь прочитать любой файл из сети, используя приведенный ниже код, он отказывается от доступа DirectoryInfo networkShare = new DirectoryInfo ("\\ TestServer \ Share");

Итак, я попытался использовать олицетворение, предоставив имя пользователя и пароль сетевого ресурса для вызова функции олицетворения функции, однако вызов явно не работает, поскольку это имя пользователя не существует на веб-сервере ASP.NET. Итак, я передал имя пользователя и пароль логина, который существует на веб-сервере, поэтому на этот раз выдается олицетворенный вызов, но он все равно не может получить доступ к сетевому ресурсу, так как сетевое имя пользователя и пароль разные.

Итак, наконец, я создал то же имя пользователя и пароль на веб-сервере, который соответствует сетевому ресурсу. На этот раз олицетворяет вызов функции, и сетевая доля. Я могу успешно прочитать его.

Итак, мой вопрос заключается в том, как я могу читать сетевой ресурс без добавления имени пользователя на веб-сервере. «Потому что всякий раз, когда меняется доступ к сети, я должен снова создать новое имя пользователя на веб-сервере. Что не идеально.

Любые идеи?

ответ

2

«правильный» способ сделать это, чтобы запустить AppPool Вебсервер как личность, которая может получить доступ к акции. Таким образом, единственное хранилище учетных данных безопасно выполняется в конфигурации IIS (а не в коде или в читаемых конфигурационных файлах). Помещение веб-сервера и файлового сервера в один домен Windows (или разные домены с доверием) является самым простым способом, но там тоже должно работать то же самое имя пользователя и пароля.

Если вы не хотите вводить имена пользователей/пароли в свой код или конфигурацию, вы можете P/Invoke на WNetAddConnection2 и передать имя пользователя/пароль, тогда вы сможете получить доступ к ресурсу. Это не требует, чтобы веб-сервер имел соответствующую учетную запись, но вы действительно должны обеспечить пароль (посмотрите в System.Security.Cryptography.ProtectedData для зашифрованного хранилища реестра).

+0

Итак, нам нужно иметь идентификационное имя пользователя/пароль на обоих серверах, правильно? Я ищу что-то, что не требует от меня создания имени пользователя на веб-сервере. Благодарю. btw, мой сетевой ресурс находится на FEDORA, а не на сервере Windows, не уверен, что это имеет значение. – ace

+0

Извините, ваше исходное сообщение не было понятным - если вы не заботитесь о сохранении имени пользователя/пароля другого сервера, я добавил что-то выше, которое должно работать. – nitzmahone

+0

Вау ... похоже на решение моей проблемы ... Я попробую и дам вам знать, если это сработает. Спасибо человеку ... Я подумываю о шифровании входа в сеть и хранении на сервере базы данных, поэтому я думаю, что все должно быть хорошо. – ace

0

попробовать этот

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

request.GetResponse(); 
+0

Мне нужно получить список всех файлов из общей папки общего доступа и скопировать все файлы на веб-сервер, возможно ли это с помощью вышеуказанного aproach? Благодарю. – ace

 Смежные вопросы

  • Нет связанных вопросов^_^