Это все о различиях в видах транспорта.Здесь у вас есть два разных транспорта:
- Двоичный поток произвольных данных
- Поток HTTP данных в кодировке HTTP
HTTP-запрос и ответ имеют оченьопределенная семантика о том, как вы аутентифицируете запрос, и это через заголовок Authorization: [scheme] [token]
и инициируется заголовком ответа WWW-Authenticate: [Scheme]
, где [scheme]
часто Negotiate
.
Двоичный поток является произвольным иоставлено разработчику, чтобы он делал все, что он хочет.
Схема Negotiate
представляет собой GSS-совместимый пакет, который представляет собой простой протокол, который позволяет клиенту и серверу согласовывать внутренний протокол аутентификации, такой как Kerberos или NTLM.В среде Windows это называется пакетом SSPI.
Пакет, GSS или SSPI, состоит из набора функций, которые запускают или принимают рукопожатия между сторонами, а затем потенциально шифруют / дешифруют данные между двумя.вечеринки (это опционально поддерживается).Эти функции генерируют сообщения, которые могут проходить через любой транспорт, и любая форма транспорта может вызывать эти функции.
В случае WebRequest
класс достаточно умен, чтобы обнаружить заголовок Negotiate
и вызовы в Windows SSPIфункции, чтобы получить билет, передавая имя пакета.В первую очередь это зависит от Kerberos для защиты самого билета, но он не защищает ничего другого в HTTP-запросе, поэтому используется SSL / TLS.
В случае NegotiateStream
формат проводника несколько произвольный, но ограничен рукопожатием Negotiate
.Клиент отправит только сообщение инициализации согласования по сети, сервер ответит, и если они согласятся, вы можете начать отправлять друг другу зашифрованные сообщения.