Tedious: La autenticación de Windows requiere especificar nombre de usuario / contraseña

Creado en 1 ago. 2016  ·  17Comentarios  ·  Fuente: tediousjs/tedious

Tedious requiere que especifique un nombre de usuario / contraseña para la autenticación de Windows, aunque estoy en el mismo dominio. No necesito especificar nombre de usuario / contraseña en este escenario con ADO.NET. Supongo que el controlador está obteniendo el token Kerberos de la tienda Credential.

¿Esta capacidad no está disponible actualmente con Tedious? ¿O hay alguna configuración que haría que la autenticación de Windows funcione sin tener que especificar nombre de usuario / contraseña?

@arobson @arthurschreiber - Pensamientos, por favor.

Follow up Response needed

Comentario más útil

¡Junté algo para integrar sspi-client en tedioso y ver si funciona y funciona! ¡Pude conectarme usando ntlm, kerberos y negociar paquetes de seguridad sin especificar una contraseña!

@arthurschreiber puedes encontrar el truco aquí. Esto no está listo para las relaciones públicas de ninguna manera, pero avíseme si ve problemas en un nivel alto.
https://github.com/tvrprasad/tedious/tree/windows-integrated-auth-draft

Todos 17 comentarios

Investigué esto un poco. Lo que he aprendido hasta ahora es que la compatibilidad con la autenticación integrada de Windows usa SSPI y NodeJS actualmente no es compatible con SSPI. Hay un paquete npm node-sspi pero que solo tiene soporte para el lado del servidor. Además, solo funciona para un servidor HTTP. Es una implementación nativa con enlace de JavaScript. La implementación de SSPI del lado del cliente también debería ser un código nativo con enlaces JavaScript.

Mi propuesta es crear un soporte SSPI del lado del cliente en un nuevo paquete npm con una API que sea adecuada para el consumo de Tedious y que Tedious tome una dependencia del paquete para la autenticación integrada de Windows de SQL Server.

Agradecería cualquier pensamiento. Gracias.

Sí, eso suena razonable. No creo que el módulo binario deba ser parte de tedioso, así que 👍 con la idea de tenerlo como un módulo npm separado.

Frio. Es probable que el primer corte solo tenga soporte para Windows. ¿Estamos de acuerdo con una característica exclusiva de Windows para empezar?

Windows y Linux tienen diferentes API para admitir la autenticación integrada de Windows. Deberíamos poder crear soporte para ambas plataformas en un solo paquete. Pero preguntarse si hay precedentes de dependencias en diferentes paquetes para Windows vs Linux.

Frio. Es probable que el primer corte solo tenga soporte para Windows. ¿Estamos de acuerdo con una característica exclusiva de Windows para empezar?

Si está bien. Me imagino que esta será una característica opcional, por lo que solo admitir Windows al principio está bien. 👍

Estoy compartiendo un breve fragmento usando la interfaz de clase ClientSspi que tengo en mente. Comparta cualquier comentario sobre la forma de la 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;
      });
    });
  }
});

Tengo una implementación de código auxiliar de la API en https://github.com/tvrprasad/sspi-client.

@arthurschreiber Por favor, haga un pase rápido cuando tenga la oportunidad. Envíeme cualquier comentario o problema abierto contra el repositorio. Una vez que complete la implementación, planeo usarla para implementar la autenticación integrada de Windows en Tedious.

¡Junté algo para integrar sspi-client en tedioso y ver si funciona y funciona! ¡Pude conectarme usando ntlm, kerberos y negociar paquetes de seguridad sin especificar una contraseña!

@arthurschreiber puedes encontrar el truco aquí. Esto no está listo para las relaciones públicas de ninguna manera, pero avíseme si ve problemas en un nivel alto.
https://github.com/tvrprasad/tedious/tree/windows-integrated-auth-draft

Reabrir este problema para rastrear la autenticación integrada de Windows hasta que se pueda conectar, más detalles en https://github.com/tediousjs/tedious/commit/f5a2260f.

@ v-suhame ¿qué es lo último con esto? ¿Estás esperando el número 624?

¿Hay algo que pueda hacer para ayudar a que se mueva?

@kevinkuszyk Gracias por la oferta de ayuda 😃 Bucle en @arthurschreiber para obtener la última actualización.

¿Está disponible ahora la autenticación integrada de Windows en el servidor Linux?

@ sxpati2 Autenticación integrada de Windows, como sugiere el nombre, es solo para el sistema operativo Windows. Para Linux sería la autenticación integrada de Kerberos. Actualmente, Tedious no es compatible con la autenticación integrada de Windows o Kerberos, está en nuestro plan futuro.

Me gustaría comprobar esto. Parece que ha habido una refactorización importante. ¿Hay alguna manera de que pueda hacer que msnodesqlv8 sea tedioso? Pensé que msnodesqlv8 simplemente caería en la secuenciación, pero no fue así.

@arthurschreiber Parece que se fusionó la autenticación integrada de Windows PR # 497 que permite la autenticación de ventana sin necesidad de nombre de usuario / contraseña, pero parece que ya no puedo encontrar eso en la última y tediosa versión. ¿Me pregunto qué pasó con esa función?

¿Ha cambiado la situación desde entonces? ¿O esa característica se ha perdido temporalmente en la refactorización?

¿Ha cambiado la situación desde entonces? ¿O esa característica se ha perdido temporalmente en la refactorización?

¡Me encantaría saberlo también!

Saludos, ¿cuál es la palabra con esta característica? ¡Gracias!

¿Fue útil esta página
0 / 5 - 0 calificaciones