Есть множество способов, но канонический метод - через протокол вроде Kerberos. Процесс выглядит следующим образом:
- Войдите в систему с какими-либо учетными данными, эти учетные данные предоставляют вам так называемый билет выдачи билетов (TGT).
- Вы открываете свой браузер и go на внутренний веб-сайт
https://internal/page.html
. - Веб-сайт отвечает кодом ошибки
HTTP 401
и заголовком WWW-Authenticate: Negotiate
. - Браузер обнаруживает это и вызывает GSS / SSPI в ОС и говорит: «Пожалуйста, дайте мне билет на
http/internal
с использованием пакета negotiate
». - Службы GSS / SSPI видят, что у вас есть TGT, и звонят в KD C (Active Directory) и запросите билет на
http/internal
. - KD C говорит "конечно" и возвращает билет клиенту.
- Служба GSS / SSPI преобразует билет в так называемый
AP-REQ
, оборачивает его в сообщение SPNEGO
и возвращает его браузеру. - Браузер кодирует его в base64, вставляет в заголовок
Authorization: Negotiate {base64}
и повторяет запрос на сайт. - Сайт получает заголовок, определяет его ' s Согласование, поэтому он передает его собственным службам GSS / SSPI.
- Эти службы декодируют сообщение, извлекают AP-REQ, расшифровывают его и проверяют, что он понимает.
- Идентификационные данные извлекаются из заявки и представляются внутренним компонентам веб-приложения.
Все, что сделал конечный пользователь, это (1) и (2). Все остальное сделал клиентский компьютер.
Тогда протоколы более высокого уровня, такие как SAML и другие, могут полагаться на приведенный выше поток для аутентификации вас в IdP, который затем может передавать токены любым зависимым сторонам, которые у вас могут быть.