Запись файлов на сетевой диск из IIS с использованием управляемой учетной записи службы

2

У меня есть приложение ASP.NET MVC 5, размещенное в IIS 10 в Windows 2016. Наши системные администраторы создали учетную запись управляемой службы (MSA), которая привязана к этому серверу и имеет разрешения на чтение/запись для папки в сети. Мне нужно написать PDF файлы в эту папку из веб-приложения, используя MSA.

В настоящее время я просто пытаюсь записать простой текстовый файл в папку:

System.IO.File.WriteAllText(@"\\SomeUncPath\Reports\test.txt", "sample text");

Вышеуказанное приводит к этой ошибке, что и следовало ожидать,

System.UnauthorizedAccessException: доступ к пути '\ SomeUncPath\Reports\test.txt' запрещен.

Я следил за этим видео: https://www.youtube.com/watch?v=lBv81lwZgIo безрезультатно. Это только заставило сайт генерировать ошибку 503.

Можно ли записывать файлы, используя олицетворение С#, как описано в этой статье? Но как вы выдаете себя за MSA, пароль которого установлен системой?

Я попробовал следующий код, используя SimpleImpersonation:

var cred = new UserCredentials("myDomain", "someMsa$", "");
Impersonation.RunAsUser(cred, LogonType.Batch, () =>
    {
        System.IO.File.WriteAllText(@"\\SomeUncPath\Reports", "sample text");
    }
);

Выше выкидывает это:

System.ArgumentException: пароль не может быть пустым или состоять только из пробельных символов. Имя параметра: пароль

Обновление 1. Сервер выдает следующую ошибку в системный журнал:

Пул приложений SomePool отключен. Служба активации процессов Windows (WAS) обнаружила сбой при запуске рабочего процесса для обслуживания пула приложений.

И эти два предупреждения:

Пул приложений SomePool отключен. Служба активации процессов Windows (WAS) не создала рабочий процесс для обслуживания пула приложений, поскольку удостоверение пула приложений недопустимо.

а также

Идентификатор пула приложений SomePool недействителен. Имя пользователя или пароль, указанные для идентификатора, могут быть неправильными, или пользователь может не иметь прав на вход в систему. Если идентификатор не исправлен, пул приложений будет отключен, когда пул приложений получит свой первый запрос. Если проблема связана с правами пакетного входа, удостоверение в хранилище конфигурации IIS должно быть изменено после предоставления прав, прежде чем служба активации процессов Windows (WAS) сможет повторить вход в систему. Если идентификатор остается недействительным после обработки первого запроса для пула приложений, пул приложений будет отключен. Поле данных содержит номер ошибки.

Я попытался это и перезагрузил сервер, но проблема остается.

Обновление 2: если я предоставлю пулу приложений свои учетные данные, приложение загрузится без проблем. Это только на MSA, что это терпит неудачу с вышеупомянутой ошибкой/предупреждениями. Что может быть не так с MSA?

Обновление 3: проблема заключалась в том, как я добавлял MSA в пул приложений. Мне нужно было включить мой домен в имя пользователя: myDomain\someMsa$. Как только у меня это было, оно работало как шарм!

  • 0
    Ошибка кажется очевидной - вы не предоставляете SomePool правильный пароль для MSA.
  • 0
    Спасибо, @NetMage. Обнаруженная проблема: при добавлении MSA в пул приложений в качестве его идентификатора я не добавлял `myDomain`. Когда он был там, он был счастлив.
Показать ещё 2 комментария
Теги:
permissions
asp.net-mvc
impersonation

1 ответ

0
Лучший ответ

Проблема была связана с отсутствием домена при установке MSA в качестве идентификатора пула приложений. При добавлении мне нужно было указать его как myDomain\someMsa$ а не просто someMsa$. Странно, что IIS не выдавал ошибку, возможно, потому что учетная запись MSA считалась локальной и доменной учетной записью.

Кроме того, в нашем случае нам не требовалось разрешение "Вход в систему как пакет" для MSA. Без него все работало нормально.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню