Tedious: A autenticação do Windows requer a especificação de nome de usuário / senha

Criado em 1 ago. 2016  ·  17Comentários  ·  Fonte: tediousjs/tedious

Tedious exige que eu especifique o nome de usuário / senha para a autenticação do Windows, embora eu esteja no mesmo domínio. Não preciso especificar o nome de usuário / senha neste cenário com ADO.NET. Presumo que o driver está obtendo o token Kerberos do armazenamento de credenciais.

Este recurso não está disponível no momento com o Tedious? Ou existe alguma configuração que faria a Autenticação do Windows funcionar sem a necessidade de especificar o nome de usuário / senha?

@arobson @arthurschreiber - Pensamentos, por favor.

Follow up Response needed

Comentários muito úteis

Eu joguei algo junto para integrar sspi-client ao tedioso e ver se funciona e funciona! Consegui me conectar usando ntlm, kerberos e negociar pacotes de segurança sem especificar a senha!

@arthurschreiber você pode encontrar o hack aqui. Isso não está pronto para RP de forma alguma, mas me avise se perceber problemas de alto nível.
https://github.com/tvrprasad/tedious/tree/windows-integrated-auth-draft

Todos 17 comentários

Eu investiguei isso um pouco. O que aprendi até agora é que o suporte para autenticação integrada do Windows usa SSPI e o NodeJS atualmente não oferece suporte para SSPI. Existe um pacote npm node-sspi, mas que só tem suporte para o lado do servidor. Além disso, só funciona para um servidor HTTP. É uma implementação nativa com vinculação de JavaScript. A implementação de SSPI do lado do cliente também precisa ser um código nativo com ligações JavaScript.

Minha proposta é construir um suporte SSPI do lado do cliente em um novo pacote npm com uma API adequada para consumo pelo Tedious e fazer com que o Tedious dependa do pacote para SQL Server Windows Integrated Auth.

Agradeceria qualquer pensamento. Obrigado.

Sim, isso parece razoável. Não acho que o módulo binário deva ser entediante, portanto, na ideia de tê-lo como um módulo npm separado.

Legal. O primeiro corte provavelmente terá suporte apenas para Windows. Estamos de acordo com um recurso exclusivo do Windows para começar?

O Windows e o Linux têm APIs diferentes para suporte à autenticação integrada do Windows. Devemos ser capazes de construir suporte para ambas as plataformas em um pacote. Mas me perguntando se há precedente para dependências em diferentes pacotes para Windows vs Linux.

Legal. O primeiro corte provavelmente terá suporte apenas para Windows. Estamos de acordo com um recurso exclusivo do Windows para começar?

Sim está bem. Eu imagino que este será um recurso opcional, então apenas o suporte ao Windows no início está bom. 👍

Estou compartilhando um pequeno trecho usando a interface da classe ClientSspi que tenho em mente. Compartilhe seus comentários sobre a forma da 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;
      });
    });
  }
});

Eu tenho uma implementação de stub da API em https://github.com/tvrprasad/sspi-client.

@arthurschreiber Por favor, faça um passe rápido quando

Eu joguei algo junto para integrar sspi-client ao tedioso e ver se funciona e funciona! Consegui me conectar usando ntlm, kerberos e negociar pacotes de segurança sem especificar a senha!

@arthurschreiber você pode encontrar o hack aqui. Isso não está pronto para RP de forma alguma, mas me avise se perceber problemas de alto nível.
https://github.com/tvrprasad/tedious/tree/windows-integrated-auth-draft

Reabrindo este problema para rastrear a autenticação integrada do Windows até que seja plugável, mais detalhes em https://github.com/tediousjs/tedious/commit/f5a2260f.

@ v-suhame quais são as novidades disso? Você está apenas esperando no # 624?

Há algo que eu possa fazer para ajudar a colocá-lo em movimento?

@kevinkuszyk Obrigado pela oferta de ajuda 😃 Looping em @arthurschreiber para obter a atualização mais recente.

A autenticação integrada do Windows no servidor Linux está disponível agora?

@ sxpati2 Autenticação integrada do Windows, como o nome sugere, é apenas para o sistema operacional Windows. Para Linux, seria autenticação integrada Kerberos. Atualmente, o Tedious não oferece suporte a autenticação integrada do Windows ou Kerberos, está em nosso plano futuro.

Eu só gostaria de verificar isso. Parece que houve uma grande refatoração. Existe uma maneira de fazer o msnodesqlv8 tornar-se tedioso? Eu pensei que o msnodesqlv8 iria cair no sequelize, mas isso não aconteceu.

@arthurschreiber Parece que a Autenticação Integrada do Windows PR # 497 foi mesclada, permitindo a autenticação da janela sem a necessidade de nome de usuário / senha, mas não consigo encontrar mais isso na última versão tediosa. Apenas se perguntando o que aconteceu com esse recurso?

A situação mudou desde então? Ou esse recurso foi temporariamente perdido no refatorador?

A situação mudou desde então? Ou esse recurso foi temporariamente perdido no refatorador?

Adoraria saber também!

Saudações, qual é a palavra com esse recurso? obrigado!

Esta página foi útil?
0 / 5 - 0 avaliações