Autenticación integrada de Windows en el cliente node.js
node.js-client windows-integrated-auth (3)
Al usar node.js como cliente, ¿es posible conectarse a un servidor usando la autenticación integrada de Windows (por ejemplo, cuando se conecta a IIS)?
Mis búsquedas para esto solo muestran resultados donde node.js se usa como un servidor.
Para Kerberos:
node-sspi
Just on windows No client side node Supports NTLM too
negociar pasaporte
Needs python on the server it''s a passportJs strategy
Para NTLM
node-sspi
Just on windows No client side node Supports Kerberos too
- httpntlm
- expreso-ntlm
- request-ntlm
ntlm
experimental project!
ntlm-auth
experimental!
pasaporte-ntlm
supports SMB protocol it''s a passportJs strategy
Elegí el pasaporte-negociar para Kerberos y Express-ntlm para NTLM
Para el lado del cliente, lo que funciona es usar node-libcurl para hacer llamadas REST / HTTP.
Aquí está el código de ejemplo:
var endpoint = urlString;
var url = require("url");
var endpointUrl = url.parse(endpoint);
var Curl = require( ''node-libcurl'' ).Curl;
var curl = new Curl();
curl.setOpt( ''USERNAME'', '''' );
//curl.setOpt( ''VERBOSE'', 1 );
curl.setOpt( ''URL'', endpoint );
curl.setOpt( ''HTTPAUTH'', Curl.auth.NEGOTIATE );
curl.setOpt( ''NOPROXY'', endpointUrl.hostname );
curl.on( ''end'', function( statusCode, body, headers ) {
if (statusCode === 200) {
console.log(body);
cb(null, { statusCode, body, headers } );
} else {
cb(new Error(), { statusCode, body, headers } );
}
this.close();
});
curl.on( ''error'', curl.close.bind( curl ) );
curl.perform();
Actualización: ahora hay algunos módulos que implementan la autenticación integrada de Windows. node-sspi usa SSPI (la API de seguridad de Windows) para manejar el lado del servidor de las cosas, pero no realiza la autenticación del cliente . Existen varias implementaciones de clientes , como http-ntlm , pero no están realmente integradas, ya que requieren la contraseña del usuario; no utilizan SSPI para realizar la autenticación transparente.
"Autenticación integrada de Windows" es lo que se conoce como autenticación NTLM. Cuando recibe un HTTP 401 de IIS con un encabezado WWW-Authenticate
contiene NTLM
, ahora tiene la diversión de implementar el protocolo de autenticación NTLM. Citando este documento sobre el protocolo de autenticación NTLM :
El cliente solicita un recurso protegido del servidor:
GET /index.html HTTP/1.1
El servidor responde con un estado
401
, lo que indica que el cliente debe autenticarse.NTLM
se presenta como un mecanismo de autenticación compatible a través del encabezadoWWW-Authenticate
. Normalmente, el servidor cierra la conexión en este momento:HTTP/1.1 401 Unauthorized WWW-Authenticate: NTLM Connection: close
Tenga en cuenta que Internet Explorer solo seleccionará NTLM si es el primer mecanismo ofrecido; esto está en desacuerdo con RFC 2616, que establece que el cliente debe seleccionar el esquema de autenticación compatible más sólido.
El cliente vuelve a enviar la solicitud con un encabezado de
Authorization
contiene un parámetro de mensaje de Tipo 1 . El mensaje Tipo 1 está codificado en Base-64 para transmisión. Desde este punto en adelante, la conexión se mantiene abierta; cerrar la conexión requiere la reautenticación de solicitudes posteriores. Esto implica que el servidor y el cliente deben admitir conexiones persistentes, ya sea a través del encabezado "Keep-Alive" del estilo HTTP 1.0 o HTTP 1.1 (en el que las conexiones persistentes se emplean de forma predeterminada). Los encabezados de solicitud relevantes aparecen como sigue:GET /index.html HTTP/1.1 Authorization: NTLM TlRMTVNTUAABAAAABzIAAAYABgArAAAACwALACAAAABXT1JLU1RBVElPTkRPTUFJTg==
El servidor responde con un estado
401
contiene un mensaje de Tipo 2 en el encabezadoWWW-Authenticate
(de nuevo, codificado en Base-64). Esto se muestra a continuación.HTTP/1.1 401 Unauthorized WWW-Authenticate: NTLM TlRMTVNTUAACAAAADAAMADAAAAABAoEAASNFZ4mrze8AAAAAAAAAAGIAYgA8AAAARABPAE0AQQBJAE4AAgAMAEQATwBNAEEASQBOAAEADABTAEUAUgBWAEUAUgAEABQAZABvAG0AYQBpAG4ALgBjAG8AbQADACIAcwBlAHIAdgBlAHIALgBkAG8AbQBhAGkAbgAuAGMAbwBtAAAAAAA=
El cliente responde al mensaje de Tipo 2 volviendo a enviar la solicitud con un encabezado de
Authorization
contiene un mensaje de Tipo 3 codificado en Base-64:GET /index.html HTTP/1.1 Authorization: NTLM TlRMTVNTUAADAAAAGAAYAGoAAAAYABgAggAAAAwADABAAAAACAAIAEwAAAAWABYAVAAAAAAAAACaAAAAAQIAAEQATwBNAEEASQBOAHUAcwBlAHIAVwBPAFIASwBTAFQAQQBUAEkATwBOAMM3zVy9RPyXgqZnr21CfG3mfCDC0+d8ViWpjBwx6BhHRmspst9GgPOZWPuMITqcxg==
Finalmente, el servidor valida las respuestas en el mensaje Tipo 3 del cliente y permite el acceso al recurso.
HTTP/1.1 200 OK
Tendrá que averiguar cómo responderá al desafío del mensaje Tipo 2 , donde la contraseña del usuario es un hash MD4 y se utiliza para crear claves DES para cifrar los datos del desafío.
No estoy seguro de cómo obtendría acceso a los datos de credenciales del usuario que inició sesión, lo que le permitiría lograr esto, aunque estoy seguro de que implicaría escribir un complemento nativo de C ++ para poder hablar con la API de Windows necesaria. O bien, supongo que podría pedir la contraseña del usuario.
De forma alternativa, podría enviar sus solicitudes de Nodo a través del software que maneja el desorden NTLM por usted .