ASP.NET Чтение файлов из защищенного паролем сетевого ресурса

StackOverflow https://stackoverflow.com/questions/1496068

  •  19-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

Есть какие-нибудь идеи?

Это было полезно?

Решение

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

Если вам не нужно указывать имена пользователей / пароли в своем коде или конфигурации, вы можете вызвать WNetAddConnection2 и передать имя пользователя / пароль - тогда вы сможете получить доступ к общему ресурсу.Для этого не требуется, чтобы веб-сервер имел соответствующую учетную запись, но вам действительно следует защитить пароль (загляните в System.Безопасность.Криптография.Защищенные данные для зашифрованного хранения реестра).

Другие советы

попробуй это

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