Windows a intégré L'authentification dans node.Client js
Lors de l'utilisation de nœud.js en tant que client, est-il possible de se connecter à un serveur en utilisant L'authentification intégrée Windows (par exemple lors de la connexion à IIS)?
Mes recherches pour ceci ne donnent que des résultats où le noeud.js est utilisé comme serveur.
3 réponses
mise à Jour: il y a maintenant quelques modules qui implémentent L'authentification intégrée à Windows. node-sspi utilise SSPI (L'API de sécurité Windows) pour gérer le côté serveur des choses, mais ne pas faire de l'authentification des clients. Il y a plusieurs implémentations clienthttp-ntlm, mais ils ne sont pas vraiment intégrés puisqu'ils nécessitent le mot de passe de l'utilisateur -- ils n'utilisent pas SSPI pour faire transparent auth.
"Windows integrated authentication" est ce qu'on appelle l'authentification NTLM. Lorsque vous recevez un HTTP 401 de IIS avec un WWW-Authenticate
en-tête contenant NTLM
, vous avez maintenant le plaisir d'implémenter le protocole D'authentification NTLM. Citant ce document sur le protocole D'authentification NTLM:
Le client demande une ressource protégée de la serveur:
GET /index.html HTTP/1.1
Le serveur répond avec un
401
statut, indiquant que le client doit s'authentifier.NTLM
est présenté comme un mécanisme d'authentification via leWWW-Authenticate
en-tête. Typiquement, le serveur ferme la connexion à ce moment:HTTP/1.1 401 Unauthorized WWW-Authenticate: NTLM Connection: close
notez Qu'Internet Explorer ne sélectionnera NTLM que s'il s'agit du premier mécanisme proposé; ceci est en contradiction avec la RFC 2616, qui stipule que le client doit sélectionner le plus fort pris en charge un dispositif d'authentification.
le client renvoie la requête avec un
Authorization
en-tête contenant un Type 1 message paramètre. Le message de Type 1 est codé Base-64 pour la transmission. À partir de ce moment, la connexion est maintenue ouverte; la fermeture de la connexion nécessite l'authentification des demandes ultérieures. Cela implique que le serveur et le client doivent prendre en charge les connexions persistantes, via L'en-tête "Keep-Alive" de type HTTP 1.0 ou HTTP 1.1 (dans lequel les connexions persistantes sont employées par défaut). Les en-têtes pertinents de la demande sont les suivants:GET /index.html HTTP/1.1 Authorization: NTLM TlRMTVNTUAABAAAABzIAAAYABgArAAAACwALACAAAABXT1JLU1RBVElPTkRPTUFJTg==
Le serveur répond avec un
401
statut contenant un message de Type 2 dans leWWW-Authenticate
en-tête (de nouveau encodé Base-64). Ceci est illustré ci-dessous.HTTP/1.1 401 Unauthorized WWW-Authenticate: NTLM TlRMTVNTUAACAAAADAAMADAAAAABAoEAASNFZ4mrze8AAAAAAAAAAGIAYgA8AAAARABPAE0AQQBJAE4AAgAMAEQATwBNAEEASQBOAAEADABTAEUAUgBWAEUAUgAEABQAZABvAG0AYQBpAG4ALgBjAG8AbQADACIAcwBlAHIAdgBlAHIALgBkAG8AbQBhAGkAbgAuAGMAbwBtAAAAAAA=
le client répond au message de Type 2 en renvoyant la demande avec un
Authorization
en-tête contenant une Base-64 encodée message de Type 3:GET /index.html HTTP/1.1 Authorization: NTLM TlRMTVNTUAADAAAAGAAYAGoAAAAYABgAggAAAAwADABAAAAACAAIAEwAAAAWABYAVAAAAAAAAACaAAAAAQIAAEQATwBNAEEASQBOAHUAcwBlAHIAVwBPAFIASwBTAFQAQQBUAEkATwBOAMM3zVy9RPyXgqZnr21CfG3mfCDC0+d8ViWpjBwx6BhHRmspst9GgPOZWPuMITqcxg==
enfin, le serveur valide les réponses dans le message de Type 3 du client et permet l'accès à la ressource.
HTTP/1.1 200 OK
Vous aurez à comprendre comment vous allez répondre à la contestation du message de Type 2, où le mot de passe de l'utilisateur est MD4 hashé et utilisé pour créer des clés DES pour crypter les données de challenge.
Je ne suis pas sûr comment vous obtiendriez l'accès aux données d'identification de l'utilisateur connecté qui vous permettrait d'accomplir ceci, mais je suis sûr que cela impliquerait d'écrire un C++ natif addon pour que vous puissiez parler à L'API Windows nécessaire. Ou, je suppose que vous pourriez demander le mot de passe utilisateur.
vous pouvez proxy de votre Nœud de demandes par le biais du logiciel qui gère le NTLM mess pour vous.
Pour Kerberos:
node-sspi
Just on windows No client side node Supports NTLM too
passeport-négocier
Needs python on the server it's a passportJs strategy
For NTLM
node-sspi
Just on windows No client side node Supports Kerberos too
- httpntlm
- express-ntlm
- demande-ntlm
ntlm
experimental project!
ntlm-auth
experimental!
passeport-ntlm
supports SMB protocol it's a passportJs strategy
j'ai choisi passport-negotiate pour Kerberos et express-ntlm pour NTLM
côté client, ce qui fonctionne est d'utiliser node-libcurl pour faire des appels REST / HTTP.
voici un exemple de code:
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();