Обыскивая методы и протоколы проверки подлинности Windows, я решил понять точную разницу между Negotiate, Kerberos и NTLM, используемыми в простом исполняемом файле, прежде чем использовать его с IIS и веб-аутентификацией.
Я достиг хороших результатов, НО мне все еще нужно больше подробностей о Negotiate и Kerberos.
У меня такой сценарий:
Я создал очень простое приложение Windows Forms C #, которое показывает окно сообщения, отображающее значение для:
System.Security.Principal.WindowsIdentity.GetCurrent().AuthenticationType
Обратите внимание, что я пользователь домена с правами администратора на моем локальном компьютере, у меня есть следующие результаты:
Когда я запускаю exe-файл (двойной щелчок) при активном подключении к DC, я получаю сообщение «Negotiate».
Когда я запускаю exe-файл (запускается как другой пользователь / с использованием локального пользователя), когда я активно подключен к контроллеру домена, я получил NTLM.
Когда я запускаю exe-файл, используя «Запуск от имени администратора» или «Запуск от имени другого пользователя», я получаю «Kerberos».
Когда я запускаю exe-файл, когда я локально вошел в систему, используя локальную учетную запись, я получил "NTLM".
Я понимаю, что LSA будет использовать NTLM для локальных учетных записей. Также я понимаю, что Active Directory использует Kerberos для аутентификации пользователей и компьютеров домена.
У меня вопрос: почему я получаю тип аутентификации Negotiate, когда я запускаю exe, используя свою учетную запись, либо (двойной щелчок), либо «запуск от другого пользователя», используя ту же учетную запись?
Обновление: я заметил следующее:
- Если локальный пользователь запускает exe, то это NTLM
- Если пользователь домена запускает исполняемый файл, тогда это Согласование (если этот пользователь является локальным администратором), но это Kerberos (если этот пользователь не является локальным администратором)
- Если администратор домена запускает исполняемый файл, то это Kerberos.
Я просто поясняю это поведение.