Mover meu site para autenticação de alterações de servidor diferente do Kerberos para o NTLM

2

Eu tenho um webservice que está configurado para a autenticação do Windows. O código do cliente que invoca o WS passa as credenciais para o WS da seguinte forma:

myWebService.Credentials = System.Net.CredentialCache.DefaultCredentials;

(no meu entender, isso representa o nome de usuário-senha-domínio do usuário logado).

Estou testando problemas de configuração e confuso sobre como garantir que o Kerberos esteja definido.

DETALHES Siga:

Eu tenho 2 diretórios virtuais no mesmo servidor IIS (um é um "cliente" com páginas .aspx) e o outro é o "servidor" (ele hospeda um webservice que o cliente invoca) .

Meu cliente exibe informações importantes sobre o usuário conectado por meio deste código:

private string GetUserInfo()
{
    System.Security.Principal.WindowsIdentity UserIdentityInfo;
    StringBuilder msg = new StringBuilder("User Name: ");
    UserIdentityInfo = System.Security.Principal.WindowsIdentity.GetCurrent();
    msg.Append(UserIdentityInfo.Name);
    msg.Append(Environment.NewLine);
    msg.Append(" Token: ");
    msg.Append(UserIdentityInfo.Token.ToString());
    msg.Append(Environment.NewLine);
    msg.Append(" Authenticated: ");
    msg.Append(UserIdentityInfo.AuthenticationType);
    msg.Append(Environment.NewLine);
    msg.Append(" System: ");
    msg.Append(UserIdentityInfo.IsSystem);
    msg.Append(Environment.NewLine);
    msg.Append(" Guest: ");
    msg.Append(UserIdentityInfo.IsGuest);
    msg.Append(Environment.NewLine);
    msg.Append(" Anonymous: ");
    msg.Append(UserIdentityInfo.IsAnonymous);
    msg.Append(Environment.NewLine);
    return msg.ToString();
}

O tipo de autenticação é Kerberos quando BOTH webclient e o webservice chamado estão no mesmo servidor (por exemplo, SERVER1). A execução real também funciona corretamente.

O tipo de autenticação é alterado para NTLM quando esse mesmo código do webclient é invocado, mas agora reside em SERVER2. O serviço da Web chamado ainda reside no servidor original (SERVER1). A execução real falha porque as credenciais não estão corretas.

SERVER1 e SERVER2 estão na mesma rede local (mesmo DOMAIN) e a conta de domínio que uso para testar cada cenário acima é a mesma (estou no grupo Administradores em cada máquina).

Como posso configurar isso para que KERBEROS seja o tipo de autenticação - ou seja, quando esse cliente em SERVER2 é invocado de um navegador por "eu"?

    
por DaniellaMercuryFan 16.05.2011 / 21:52

1 resposta

1

O que você tem é uma clássica situação de salto duplo. O gráfico no post a seguir é praticamente a sua situação exata:

link

Quando o seu 'cliente' e 'serviço' estão no Server1, existe apenas um 'single hop' para autenticar o usuário. Quando você introduziu o Server2 na mistura, agora você tem o hop duplo onde a autenticação agora é delegada.

Como você está executando seus pools de aplicativos como uma conta de domínio, precisará configurar os nomes principais de serviço (SPNs) para impedir o salto duplo. Existem recursos mencionados no post acima. Há menção a isso neste artigo também:

link

Um SPN precisará ser criado para a conta de usuário, serviço e nome de host específicos. Isso precisa ser feito no controlador de domínio.

    
por 16.05.2011 / 22:15