.net - Cómo encontrar si NTLM o Kerberos se usa desde WWW-Authenticate: Negociar el encabezado
negotiate (4)
Analizar un encabezado de negociación es una especie de ejercicio tedioso, ya que se construye utilizando ASN.1 DER.
Dicho esto, es posible que no necesariamente tenga que decodificar esto para hacer una buena suposición sobre la carga útil. Si bien hay un mecanismo en GSSAPI para NTLM (más sobre eso más adelante), en mi experiencia, los clientes no lo usan, simplemente envían encabezados NTLM. En mi entorno (aunque estrictamente controlado), si veo Authorization: NTLM ...
entonces esto está garantizado como NTLM. Si veo Authorization: Negotiate ...
entonces esto está garantizado para ser Kerberos.
Estrictamente hablando, debe mirar la lista de mecanismos en el encabezado para determinar si el mecanismo fue NTLM o Kerberos. Recomendaría usar un decodificador ASN.1 estándar o mirar el ejemplo de decodificación de Microsoft. Vas a querer buscar el OID SPNEGO ( 1.3.6.1.5.5.2
), luego busca la secuencia de tipo de mecanismo dentro de eso. El primer mecanismo en la secuencia corresponde a la carga útil del token de respuesta, por lo que puede ver ese OID para determinar el mecanismo. Algunos OID conocidos para Kerberos son:
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)
Que yo sepa, el único OID para NTLM es (referenciado en este blog ):
1.3.6.1.4.1.311.2.2.10 (NLMP NTLM)
Estoy programando una aplicación cliente en .Net que se comunica con el servidor a través de HTTP.
Necesito establecer diferentes opciones de búfer de solicitud en caso de autorización NTLM y Kerberos.
¿Cómo saber si se usa NTLM o Kerberos? ¿Es posible decodificar de alguna manera el encabezado ''WWW-Authenticate: Negotiate''?
Encontrará la respuesta here .
La respuesta corta es:
1.Capture some successfully authorized request using Fiddler tool.
2.Choose "Inspectors" -> "Headers" tab.
3.Pay attention at "Cookies / Login" section, "Authorization" header.
Si el token de autorización comienza con "YII", entonces se usa Kerberos, pero si comienza con "TlR", entonces no se usa Kerberos.
Por ejemplo Kerberos:
Authorization: Negotiate YIIVDAYGKwYBE...
No Kerberos:
Authorization: Negotiate TlRMTVNTUA...
Sí; simplemente Base64 lo descodifica y verá "NTLM" o "HTTP".
DO#
v = BitConverter.ToString(Convert.FromBase64String(v.Replace("Negotiate: ","")));
if (v.indexOf("NTLM") > -1) {
//...
}
Si el servidor anuncia al usuario Negociar, puede usar Kerberos, NTLM o algo está soportado por SPNEGO. Sin embargo, no hay garantía de que el servidor admita todos los métodos de autenticación envueltos por el cliente.