Как разрешить веб-приложению .NET Core доступ к сетевым дискам?

#c# #.net #iis #.net-core

#c# #.net #iis #.net-core

Вопрос:

Я реализую веб-api .NET Core (3.1), который считывает файлы с сетевого диска, выполняет в них строковые манипуляции и записывает их в другую папку (на том же сетевом диске).

Цель состоит в том, чтобы запустить этот процесс с помощью HTTP-запроса.

Для достижения этой цели я создал свой проект web api, развернутый в IIS 10 (win10), и веб-приложение работает отлично.

Однако при попытке доступа к сетевому диску у меня всегда возникают проблемы с разрешениями:

 System.UnauthorizedAccessException: Access to the path '\mynetworkdrive' is denied.
   at System.IO.FileSystem.CreateDirectory(String fullPath, Byte[] securityDescriptor)
   at System.IO.Directory.CreateDirectory(String path)
   ...
  

Я пробовал использовать все разные идентификаторы в разделе Пул приложений -> Дополнительные настройки -> Идентификатор, и ничего не сработало.

Что я слышу от команды инфраструктуры моей компании, авторизация на этот сетевой диск предоставляется на уровне пользователя, поэтому было бы невозможно просто предоставить разрешения учетной записи компьютера моего веб-сервера для доступа к диску (прошу прощения, если я не использую здесь правильную терминологию — не специалист по сетям).

Я уже пару дней пытаюсь разобраться с этим, но безуспешно. Любая помощь будет очень признательна.

TL; DR:

У меня есть веб-приложение .NET Core, которое получает HTTP-запрос, и когда это происходит, предполагается, что оно читает и записывает файлы, которые существуют на сетевом диске. Однако System.Возникает исключение UnauthorizedAccessException, препятствующее доступу моего приложения к сетевому диску и его содержимому.

Обновить:

Не уверен, имеет ли это смысл, но я думаю, что я не могу разрешить доступ к моему сетевому диску группе IIS_IUSRS (группа для пользователей пула приложений), потому что это локальная группа на компьютере, на котором размещено мое приложение. В таком случае, возможно, мне нужно настроить этот пул приложений для запуска от имени определенного пользователя домена, у которого есть права на чтение / запись на моем сетевом диске. Возможно ли это вообще? Если да, то как я могу это сделать?

Комментарии:

1. Если вы откроете File Explorer и вставьте \mynetwork drive, увидите ли вы содержимое?

2. Под каким пользователем работает ваш пул приложений? Будьте конкретны.

3. @Delphi. Мальчик, что еще более важно: если учетная запись пользователя, с которой работает веб-сервер, делает это : видит ли она содержимое?

4. @Delphi. Мальчик, да, я могу получить доступ к диску просто отлично.

5. @mjwills, когда я щелкаю правой кнопкой мыши свой пул приложений и перехожу к расширенным настройкам, идентификатор устанавливается на LocalSystem . Обратите внимание, что я использую IIS 10.

Ответ №1:

Это связано с тем, что на вашем диске установлены права доступа, и приложение не может получить к нему доступ.

Щелкните правой кнопкой мыши каталог вашего диска, затем выберите «Свойства»:

введите описание изображения здесь

Нажмите «Редактировать»:

введите описание изображения здесь

Я рекомендую предоставить всем «именам групп или пользователей» полные разрешения на управление:

введите описание изображения здесь

Комментарии:

1. Дело в том, что, насколько я понимаю, пулы приложений запускаются пользователями в группе IIS_IUSRS, и эта группа локальна для компьютера, на котором размещено приложение. Это не доменная группа, для которой я могу установить разрешения на своем сетевом диске.

2. @Lewis Итак, измените пул приложений, чтобы он запускался под идентификатором домена.

3. @mjwills Я думаю, что это именно то, что я должен сделать. Но я не могу найти ничего, что помогло бы мне сделать это в IIS 10. Есть мысли?

4. Этот ответ не очень хорошая идея для сетевой папки!

5. Вы можете попытаться предоставить разрешения пользователю СЕТЕВОЙ СЛУЖБЫ. У этого есть аналогичный вопрос, вы можете обратиться к этой ссылке: forums.asp.net/t /…