Как узнать, используется ли NTLM или Kerberos, из заголовка WWW-Authenticate: Negotiate

Я программирую клиентское приложение в .Net, которое общается с сервером через HTTP.

Мне нужно установить разные параметры буферизации запросов в случае авторизации NTLM и Kerberos.

Как узнать, используется ли NTLM или Kerberos? Можно ли как-то расшифровать заголовок WWW-Authenticate: Negotiate?


person IT Hit WebDAV    schedule 08.04.2011    source источник


Ответы (4)


Вы найдете ответ здесь < / а>.

Короткий ответ:

1.Capture some successfully authorized request using Fiddler tool.
2.Choose "Inspectors" -> "Headers" tab.
3.Pay attention at "Cookies / Login" section, "Authorization" header.

Если маркер авторизации начинается с «YII», тогда используется Kerberos, но если он начинается с «TlR», то Kerberos не используется.

Например Kerberos:

Authorization: Negotiate YIIVDAYGKwYBE...

Не Kerberos:

Authorization: Negotiate TlRMTVNTUA...
person Taras Kozubski    schedule 09.09.2013
comment
Отлично! Очень просто и работает в .Net / C #. Спасибо, Тарас! - person IT Hit WebDAV; 11.09.2013
comment
Также на вкладке Inspectors / Auth будет сказано что-то вроде «Заголовок авторизации (переговоры), похоже, содержит билет Kerberos». - person santos; 06.03.2014
comment
Что делать, если начинается с ОС? - person Oszkar; 11.11.2014
comment
+1 для YII, я удивлен, что поиск первых нескольких байтов в шестнадцатеричном формате не сразу показал, что это Kerberos, когда я пытался идентифицировать blob. - person Rawling; 26.06.2017
comment
Стоит отметить: Base64Decode (TlRMTVNT) = NTLMSS. - person bmm6o; 31.12.2020
comment
@Oszkar, что, вероятно, означает, что вы смотрите на токен продолжения переговоров, я думаю, что правило YII и TlR применяется только к первому токену, отправленному из браузера, а не к последующим токенам. - person egerardus; 05.01.2021

Анализ заголовка Negotiate - утомительное занятие, поскольку оно построено с использованием ASN.1 DER.

Тем не менее, вам не обязательно нужно декодировать это, чтобы сделать хорошее предположение о полезной нагрузке. Хотя в GSSAPI для NTLM есть механизм (подробнее об этом ниже), по моему опыту клиенты на самом деле его не используют, они просто отправляют заголовки NTLM. В моей (предположительно строго контролируемой) среде, если я вижу Authorization: NTLM ..., то это гарантированно NTLM. Если я вижу Authorization: Negotiate ..., то это гарантированно Kerberos.

Строго говоря, вы должны посмотреть на список механизмов в заголовке, чтобы определить, был ли этот механизм NTLM или Kerberos. Я бы порекомендовал либо использовать стандартный декодер ASN.1, либо посмотреть на Microsoft пример расшифровки. Вам нужно будет найти SPNEGO OID (1.3.6.1.5.5.2), а затем найти в нем последовательность типов механизма. Первый механизм в последовательности соответствует полезной нагрузке токена ответа, поэтому вы можете посмотреть этот OID, чтобы определить механизм. Некоторые известные OID для Kerberos:

1.2.840.113554.1.2.2 (Kerberos 5)
1.2.840.48018.1.2.2 (Microsoft Kerberos 5)
1.3.5.1.5.2 (Kerberos 5 OID 2)

Насколько мне известно, единственный OID для NTLM - это (ссылка на этот блог):

1.3.6.1.4.1.311.2.2.10 (NLMP NTLM)
person Edward Thomson    schedule 14.07.2011
comment
Абсолютно законно и возможно использовать NTLM внутри Negotiate, и, по моему опыту, это довольно распространено. Если вы просто декодируете заголовок base64, должно быть очевидно, какой SSP используется. Например. загляните внутрь вкладки AUTH Fiddler. - person EricLaw; 23.04.2013
comment
@EricLaw: вот почему я предложил разобрать список механизмов. - person Edward Thomson; 23.04.2013
comment
@EricLaw: и если есть более тривиальный способ определить механизм, чем путем его правильного анализа, то это было бы полезным знанием. Разве это не то, что делает скрипач? - person Edward Thomson; 24.04.2013
comment
Также существует OID для NegoEx: 1.3.6.1.4.1.311.2.2.30. Это используется для расширения авторизации: согласование заголовков для поддержки новых протоколов. - person Michael Steele; 18.09.2013
comment
false = Если я вижу Авторизация: Согласовать ... то это гарантированно Kerberos - person user1133275; 15.08.2017
comment
@ user1133275 Мне казалось, что я довольно ясно дал понять отказ от ответственности в моей среде, но в любом случае спасибо за отрицательный голос! - person Edward Thomson; 15.08.2017

Если сервер объявляет пользователю Negotiate, вы можете использовать Kerberos, NTLM или что-то, поддерживаемое SPNEGO. Тем не менее, нет никакой гарантии, что сервер поддерживает каждый завернутый метод аутентификации, отправленный клиентом.

person Michael-O    schedule 14.07.2011
comment
Я программирую его с помощью .Net, и я могу указать Negotiate только на стороне клиента. Итак, наконец, я не знаю, был ли выбран NTLM или Kerberos. Есть идеи, как определить, что было выбрано? - person IT Hit WebDAV; 14.07.2011

Да; просто декодируйте его Base64, и вы увидите «NTLM» или «HTTP».

C#

v = BitConverter.ToString(Convert.FromBase64String(v.Replace("Negotiate: ","")));
if (v.indexOf("NTLM") > -1) {
    //...
}
person user1133275    schedule 16.08.2017