У меня есть веб-приложение mvc4, в котором пользователи регистрируются в своих учетных записях в своем роуминге. Я аутентифицирую их через Active Directory
. И почти во всех методах мне нужно олицетворять зарегистрированного пользователя, чтобы сделать некоторые операции с файлами.Могу ли я выдавать себя за сеанс?
Я использую следующие методы для олицетворения:
[DllImport("advapi32.dll", SetLastError = true)]
public static extern int LogonUser (string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out IntPtr phToken);
[DllImport("advapi32.dll", SetLastError = true)]
public static extern int ImpersonateLoggedOnUser (IntPtr hToken);
[DllImport("advapi32.dll", SetLastError = true)]
static extern int RevertToSelf();
[DllImport("kernel32.dll", SetLastError = true)]
static extern int CloseHandle (IntPtr hObject);
private IntPtr lnToken;
Я выполнил свою impersonater как IDisposable
класса и в constructor
я олицетворять и в Dispose
методы я вернуться обратно к пользователю, который был на перед моим олицетворением. Так что я могу использовать его в using
заявление легко в моих методах контроллера, как это:
public ActionResult SomeAction (string param)
{
using (new Impersonator(username, password, nameSpace))
{
/// do staff
}
}
Этот подход работает просто отлично, хотя я полагал, что это замедляет время отклика веб-сайта в течение 1,5-2 секунд и I это немного раздражает.
Что мне интересно? Могу ли я сделать олицетворение, когда пользователь входит в систему и возвращается назад, когда выходит из системы или время их сеанса? Другими словами, могу ли я сохранить олицетворение живым через сеанс?
Возможно, я не использую правильную терминологию, извините.
Можете ли вы позволить IIS (при условии, что вы используете его) обрабатывать аутентификацию? Мы делаем это с нашим приложением, а затем IIS также обрабатывает олицетворение для вас - весь запрос затем выполняется в контексте пользователя. –
Да Я запускаю свой сайт под IIS. Но возможно ли, чтобы IIS выдавал себя за разные логины? Или вы говорите об идентификаторе пула приложений в IIS? –
Да, каждый пользователь будет выдавать себя индивидуально. В этот момент все работает в контексте безопасности, а не в пуле приложений. –