У меня есть веб-приложение MVC в интрасети и вы хотите иметь возможность создавать файлы на нашем FTP-сервере для отправки внешним партнерам.
В коде для олицетворения используется файл WindowsImpersonationContext.
System.Security.Principal.WindowsImpersonationContext impersonationContext;
impersonationContext = ((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate();
StreamWriter sw = System.IO.File.CreateText("PathOnFTPServer");
sw.Write("data");
impersonationContext.Undo();
Вот что происходит и причина моего вопроса:
Предварительная олицетворение
User.Identity.Name: [мои учетные данные для Windows]
System.Security.Principal.WindowsIdentity.GetCurrent(). Имя: NT AUTHORITY\NETWORK SERVICE
Опубликовать олицетворение
User.Identity: [мои учетные данные для Windows]
GetCurrent.Name: [мои учетные данные для Windows]
Выдача олицетворения
User.Identity: [мои учетные данные для Windows]
GetCurrent.Name: NT AUTHORITY\NETWORK SERVICE
Итак, до того, как я выдал себя за себя, текущий пользователь является Системной учетной записью, но после олицетворения использует мою учетную запись домена Windows, которая имеет разрешение на создание текстовых файлов на FTP-сервере. Код работает локально с использованием веб-сервера визуальной студии, но не тогда, когда я его развертываю в IIS на нашем тестовом сервере.
Я получаю ошибку отказа в доступе. Какова будет причина ошибки при выдаче правильного пользователя?