У меня есть веб-приложение 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
Post Олицетворение
User.Identity: [мои учетные данные Windows]
GetCurrent.Name: [мои учетные данные Windows]
Олицетворение Отменить
User.Identity: [мои учетные данные Windows]
GetCurrent.Name: NT AUTHORITY \ NETWORK SERVICE
Итак, перед тем, как я олицетворяю, текущий пользователь является системной учетной записью, но после олицетворения он использует мою учетную запись домена Windows, которая имеет разрешение на создание текстовых файлов на FTP-сервере. Код работает локально с использованием веб-сервера visual studio, но не при его развертывании в IIS на нашем тестовом сервере.
Я получаю ошибку об отказе в доступе. Какова будет причина ошибки, когда правильный пользователь выдает себя за вас?