Олицетворения в ASP.NET в MVC
У меня есть веб-приложение 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();
вот что происходит и причина моего вопроса:
До Олицетворения
пользователь.Личность.Имя: [мои учетные данные windows]
Система.Безопасность.Директор.WindowsIdentity.GetCurrent ().Имя: NT AUTHORITYСЕТЕВАЯ СЛУЖБА
Пост Олицетворения
пользователей.Identity: [мои учетные данные windows]
GetCurrent.Имя: [мои учетные данные windows]
Олицетворение Отменить
пользователей.Identity: [мои учетные данные windows]
GetCurrent.Имя: NT AUTHORITYNETWORK SERVICE
Итак, прежде чем я олицетворяю, текущий пользователь является системной учетной записью, но после олицетворения он использует мой учетная запись домена windows, которая имеет разрешение на создание текстовых файлов на FTP-сервере. Код работает локально с помощью веб-сервера visual studio, но не при его развертывании на IIS на нашем тестовом сервере.
Я получаю ошибку отказа в доступе. Какова будет причина ошибки при олицетворении правильного пользователя?
1 ответов
олицетворение позволяет машине олицетворение машины, поэтому браузер клиента и сервер находятся на одной странице, когда дело доходит до олицетворения. При попытке доступа к сетевому ресурсу компьютер не доверяет олицетворенным учетным данным.
необходимо включить делегирование для машины IIS в Active Directory. Перейдите к пользователям и компьютерам Active Directory, найдите компьютер, щелкните свойства и "доверить компьютер для делегирования". (Возможно, Вам понадобится перезапустить IIS, чтобы это работало, я не помню).
там больше теории, чем это, что я не полностью понимаю, но это должно работать. Правильно это или нет, кто-то еще может прокомментировать!
кроме того, причина, по которой он работает на вашей машине разработки, заключается в том, что сервер разработки работает как разработчик, а не (локальная)\сетевая служба.
достойный ссылка:
http://msdn.microsoft.com/en-us/library/cc949004.aspx
в чем разница между олицетворением и делегированием?
олицетворение передает идентификатор исходного вызывающего абонента на серверные ресурсы на том же компьютере. Делегирование передает идентификатор исходного вызывающего объекта во внутренние ресурсы на компьютерах, отличных от компьютера, на котором запущена служба.
например, если служба запуск в IIS без олицетворения служба будет получать доступ к ресурсам с помощью ASP.NET учетная запись в IIS 5.0 или учетная запись сетевой службы в IIS 6.0. При олицетворении, если клиент подключается с использованием учетной записи исходного вызывающего абонента, служба будет обращаться к ресурсам, таким как база данных SQL Server на том же компьютере, используя учетную запись исходного вызывающего абонента вместо системы ASP.NET счет. Делегирование аналогично, за исключением того, что база данных SQL Server может находиться на другом компьютере удаленного сервиса.