Синтаксический анализ заголовка 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)