Tedious: L'authentification Windows nécessite la spécification du nom d'utilisateur/mot de passe

Créé le 1 août 2016  ·  17Commentaires  ·  Source: tediousjs/tedious

Tedious m'oblige à spécifier le nom d'utilisateur/mot de passe pour l'authentification Windows même si je suis sur le même domaine. Je n'ai pas besoin de spécifier le nom d'utilisateur/mot de passe dans ce scénario avec ADO.NET. Je suppose que le pilote obtient le jeton Kerberos du magasin d'informations d'identification.

Cette fonctionnalité n'est-elle pas actuellement disponible avec Tedious ? Ou existe-t-il une configuration qui ferait fonctionner l'authentification Windows sans avoir à spécifier le nom d'utilisateur/mot de passe ?

@arobson @arthurschreiber -

Follow up Response needed

Commentaire le plus utile

J'ai jeté quelque chose ensemble pour intégrer sspi-client à fastidieux et voir si ça marche et ça marche ! J'ai pu me connecter en utilisant ntlm, kerberos et négocier des packages de sécurité sans spécifier de mot de passe !

@arthurschreiber vous pouvez trouver le hack ici. Ce n'est en aucun cas prêt pour les relations publiques, mais faites-moi savoir si vous voyez des problèmes à un niveau élevé.
https://github.com/tvrprasad/tedious/tree/windows-integrated-auth-draft

Tous les 17 commentaires

J'ai enquêté là-dessus. Ce que j'ai appris jusqu'à présent, c'est que la prise en charge de l'authentification intégrée de Windows utilise SSPI et que NodeJS ne prend actuellement pas en charge SSPI. Il existe un package node-sspi npm mais qui ne prend en charge que le côté serveur. De plus, cela ne fonctionne que pour un serveur HTTP. C'est une implémentation native avec une liaison JavaScript. L'implémentation SSPI côté client devrait également être du code natif avec des liaisons JavaScript.

Ma proposition est de créer une prise en charge SSPI côté client dans un nouveau package npm avec une API adaptée à la consommation par Tedious et de faire en sorte que Tedious dépende du package pour SQL Server Windows Integrated Auth.

Apprécierait toutes les pensées. Merci.

Oui, cela semble raisonnable. Je ne pense pas que le module binaire devrait faire partie de fastidieux, donc sur l'idée de l'avoir en tant que module npm séparé.

Frais. La première coupe ne prendra probablement en charge que Windows. Sommes-nous d'accord avec une fonctionnalité Windows uniquement pour commencer ?

Windows et Linux ont une API différente pour prendre en charge l'authentification intégrée de Windows. Nous devrions pouvoir intégrer la prise en charge des deux plates-formes dans un seul package. Mais je me demande s'il existe un précédent pour les dépendances sur différents packages pour Windows vs Linux.

Frais. La première coupe ne prendra probablement en charge que Windows. Sommes-nous d'accord avec une fonctionnalité Windows uniquement pour commencer ?

Oui c'est bon. J'imagine que ce sera une fonctionnalité facultative, donc ne prendre en charge que Windows au début est bien. ??

Je partage un court extrait en utilisant l'interface de classe ClientSspi que j'ai en tête. Veuillez partager vos commentaires sur la forme de l'API.

ClientSspi = require('ClientSspi');

serverName = 'servername.example.com';

// Server name should be the only configuration. Windows SSPI APIs will get
// the tokens to be presented to the server to authenticate the logged in user.
clientSspi = new ClientSspi(serverName);

// authprotocol parameter can take three values.
// Negotiate, Kerberos, Ntlm
// Negotiate: With this option client will negotiate with the server
// on security protocol using SPNEGO.
//
// If nothing is specified, the first supported protocol will be used. The
// protocols will be attempted in the sequence listed above.
clientSspi.initialize(authprotocol, function(errorCode, errorString) {
  if (errorCode || errorString) {
    throw('SSPI intialization failed: ', errorCode, ': ', errorString);
  }

  var sspiServerResponse = new Uint8Array([]);
  var sspiDone = false;

  while (!sspiDone) {
    // This call gets the next set of bytes to send to the server as part of the
    // SSPI dance.
    clientSspi.getNextSspiBlob(sspiServerResponse, function (sspiClientResponse, isDone, errorCode, errorString) {
      if (errorCode || errorString) {
        throw('SSPI intialization failed: ', errorCode, ': ', errorString);
      }

      sspiDone = isDone;

      // This function will send the sspiClientResponse to the server and invokes the
      // callback when the response from the server becomes available.
      SendSspiBlobToSqlServerAndGetResponse(sspiClientResponse, function (serverResponse, errorString) {
        if (errorString) {
          throw(errorString);
        }

        sspiServerResponse = serverResponse;
      });
    });
  }
});

J'ai une implémentation de l'API sur https://github.com/tvrprasad/sspi-client.

@arthurschreiber Veuillez faire une passe rapide lorsque vous en avez l'occasion. Envoyez-moi des commentaires ou des problèmes ouverts concernant le référentiel. Une fois que j'aurai rempli l'implémentation, je prévois de l'utiliser pour implémenter l'authentification intégrée de Windows dans Tedious.

J'ai jeté quelque chose ensemble pour intégrer sspi-client à fastidieux et voir si ça marche et ça marche ! J'ai pu me connecter en utilisant ntlm, kerberos et négocier des packages de sécurité sans spécifier de mot de passe !

@arthurschreiber vous pouvez trouver le hack ici. Ce n'est en aucun cas prêt pour les relations publiques, mais faites-moi savoir si vous voyez des problèmes à un niveau élevé.
https://github.com/tvrprasad/tedious/tree/windows-integrated-auth-draft

Réouverture de ce problème pour suivre l'authentification intégrée de Windows jusqu'à ce qu'elle soit enfichable, plus de détails dans https://github.com/tediousjs/tedious/commit/f5a2260f.

@v-suhame quelle est la dernière avec ça? Attendez-vous simplement le #624?

Y a-t-il quelque chose que je puisse faire pour l'aider à bouger?

@kevinkuszyk Merci pour l'offre d'aide 😃 Boucle dans @arthurschreiber pour obtenir la dernière mise à jour.

L'authentification intégrée de Windows sur le serveur Linux est-elle disponible maintenant ?

@sxpati2 L'authentification intégrée de Windows, comme son nom l'indique, s'appuie sur le système d'exploitation Windows. Pour Linux, ce serait Kerberos Integrated auth. Tedious ne prend actuellement pas en charge l'authentification intégrée Windows ou Kerberos, c'est dans notre futur plan.

Je voudrais juste vérifier ça. Il semble qu'il y ait eu un refactor majeur. Existe-t-il un moyen de simplement boucler msnodesqlv8 en fastidieux? Je pensais que msnodesqlv8 passerait simplement à sequelize, mais ce n'est pas le cas.

@arthurschreiber Il semble que l'authentification intégrée Windows PR # 497 a été fusionnée, ce qui permet l'authentification par fenêtre sans avoir besoin de nom d'utilisateur/mot de passe, mais je n'arrive plus à trouver cela dans la dernière version fastidieuse. Vous vous demandez simplement ce qui est arrivé à cette fonctionnalité ?

La situation a-t-elle changé depuis ? Ou cette fonctionnalité a-t-elle été temporairement perdue dans le refactor ?

La situation a-t-elle changé depuis ? Ou cette fonctionnalité a-t-elle été temporairement perdue dans le refactor ?

J'aimerais bien savoir aussi !

Salutations, quel est le mot avec cette fonctionnalité? Merci!

Cette page vous a été utile?
0 / 5 - 0 notes