#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 /…