Сайт ASP.NET MVC, который позволяет анонимному пользователю, но при входе в систему запускается от имени зарегистрированного пользователя AD?

У меня есть сайт ASP.NET MVC 5, который использует проверку подлинности с помощью форм с помощью настраиваемого класса членства.

Процедура входа на мой сайт:

  1. Анонимный посетитель пытается перейти на мой сайт. Ему это разрешено, но он перенаправляется на мою страницу входа.

  2. Посетитель вводит свое имя пользователя и пароль, настроенные в активном каталоге моей сети (AD).

  3. Код .NET AD проверяет учетные данные, а затем отвечает файлом cookie для посетителя, содержащим основную информацию (его имя, адрес электронной почты и т. Д.).
  4. Посетитель перенаправляется на домашнюю страницу. Он прошел аутентификацию, но на самом деле сайт работает как удостоверение пула приложений, а не как удостоверение пользователя AD вошедшего в систему.

Моя проблема: в №4, как мне сделать так, чтобы удостоверение моего сайта выполнялось как удостоверение AD аутентифицированного пользователя, а не удостоверение пула приложений сайта? Мне нужно это сделать, потому что для определенной службы, которую использует мое приложение, требуется идентификатор пользователя AD, а не идентификатор пула приложений.

Возможное решение: в пункте 2 я получаю имя пользователя и пароль посетителя и использую их для проверки подлинности того, что он является действительным идентификатором AD. Я мог бы зашифровать и сохранить пароль пользователя, а затем всякий раз, когда мне нужно было использовать службу, требующую идентификатора пользователя AD, я мог бы просто создать новый NetworkCredential из его имени пользователя и пароля. Однако мне не нравится это решение, потому что я бы предпочел не хранить пароль пользователя, если я могу этого избежать.

Спасибо за любую помощь!


person David Alan Condit    schedule 19.04.2019    source источник
comment
Вам нужно использовать олицетворение. Я создал много подобных приложений. Либо используйте олицетворение все время, либо только в течение необходимого времени. Чем короче, тем лучше в целях безопасности. См. этот вопрос или поищите его в Интернете.   -  person CodingYoshi    schedule 19.04.2019
comment
Если я использую олицетворение в течение короткого времени, мне нужно будет сохранить пароль пользователя в его cookie (зашифрованном), чтобы я мог олицетворять его учетные данные, когда мне нужно использовать службу, которая этого требует. В противном случае, как бы я выдавал себя за весь его сеанс? С момента входа в систему до момента выхода или истечения срока его действия?   -  person David Alan Condit    schedule 19.04.2019
comment
Посмотрите, что это дает вам: (System.Security.Principal.WindowsIdentity)User.Identity, и вы поймете, о чем я.   -  person CodingYoshi    schedule 19.04.2019
comment
Это просто возвращает анонимную личность. У меня такой файл web.config, так что, возможно, я неправильно говорю, когда говорю, что он формирует аутентификацию. Он в основном работает так же, как и формы auth, но технически установлен как Windows. IIS обеспечивает идентификацию Windows, олицетворение и анонимность. Подключиться как есть передать как удостоверение пула приложений. ‹Режим аутентификации = Windows› ‹/authentication› ‹олицетворение личности = true /›   -  person David Alan Condit    schedule 19.04.2019
comment
Я считаю, что на самом деле вы имеете в виду следующее: var currentWindowsIdentity = System.Security.Principal.WindowsIdentity.GetCurrent();, который возвращает MyADDomain \ MyAppPoolIdentityName.   -  person David Alan Condit    schedule 19.04.2019
comment
Вы проводили какое-либо исследование? См. это, пожалуйста.   -  person CodingYoshi    schedule 19.04.2019
comment
Ага. Судя по вашей первой ссылке, мне кажется, что мне нужно настроить мой сервер IIS для делегирования, чтобы можно было передать учетные данные посетителя AD. Возможно, лучшим решением будет this, что, похоже, позволяет мне выдавать себя за пользователя, используя его основное имя пользователя. Мне не нужно было бы таким образом сохранять его пароль.   -  person David Alan Condit    schedule 19.04.2019
comment
Мне никогда не приходилось хранить пароль.   -  person CodingYoshi    schedule 19.04.2019