Noções básicas de autenticação HTTP
A autenticação é o processo de identificar o cliente, normalmente para determinar se ele está qualificado para acessar um recurso. O protocolo HTTP dá suporte à autenticação como um meio de negociar o acesso a um recurso seguro.
A solicitação inicial de um cliente normalmente é uma solicitação anônima, não contendo nenhuma informação de autenticação. Os aplicativos de servidor HTTP podem negar a solicitação anônima e indicar que a autenticação é necessária. O aplicativo de servidor envia cabeçalhos WWW-Authentication para indicar os esquemas de autenticação com suporte. Este artigo descreve vários esquemas de autenticação para HTTP e discute o suporte a eles no WCF (Windows Communication Foundation).
Esquemas de autenticação HTTP
O servidor pode especificar vários esquemas de autenticação para o cliente escolher. A seguinte tabela descreve alguns dos esquemas de autenticação comumente encontrados em aplicativos do Windows:
Esquema de Autenticação | Descrição |
---|---|
Anônima | Uma solicitação anônima não contém nenhuma informação de autenticação. Anônimo equivale a conceder a todos o acesso ao recurso. |
Basic | A autenticação básica envia uma cadeia de caracteres codificada em Base64 que contém um nome de usuário e uma senha para o cliente. O Base64 não é uma forma de criptografia e deve ser considerado o mesmo que enviar o nome de usuário e a senha em um texto não criptografado. Se um recurso precisar ser protegido, considere fortemente o uso de um esquema de autenticação diferente da autenticação básica. |
Digest | A autenticação digest é um esquema de desafio-resposta que se destina a substituir a autenticação básica. O servidor envia uma cadeia de caracteres de dados aleatórios chamada nonce para o cliente como um desafio. O cliente responde com um hash que inclui o nome de usuário, a senha e a nonce, entre outras informações. A complexidade que essa troca apresenta e o hash de dados tornam mais difícil roubar e reutilizar as credenciais do usuário com esse esquema de autenticação. A autenticação digest requer o uso de contas de domínio do Windows. O realm do digest é o nome de domínio do Windows. Portanto, você não pode usar um servidor em execução em um sistema operacional que não dê suporte a domínios do Windows, como o Windows XP Home Edition, com autenticação Digest. Por outro lado, quando o cliente é executado em um sistema operacional que não dá suporte a domínios do Windows, uma conta de domínio precisa ser especificada explicitamente durante a autenticação. |
NTLM | A autenticação do NTLM (Gerente de LAN do NT) é um esquema de resposta de desafio que é uma variação mais segura da autenticação Digest. A NTLM usa credenciais do Windows para transformar os dados de desafio em vez do nome de usuário e senha não codificados. A autenticação NTLM requer várias trocas entre o cliente e o servidor. O servidor e quaisquer proxies intervenientes devem dar suporte a conexões persistentes para concluir a autenticação com êxito. |
Negotiate | Negociar a autenticação seleciona automaticamente entre o protocolo Kerberos e a autenticação NTLM, dependendo da disponibilidade. O protocolo Kerberos será usado se estiver disponível; caso contrário, haverá uma tentativa de usar o NTLM. A autenticação Kerberos melhora significativamente na NTLM. A autenticação Kerberos é mais rápida que a NTLM e permite o uso de autenticação mútua e delegação de credenciais para computadores remotos. |
Windows Live ID | O serviço subjacente HTTP do Windows inclui autenticação usando protocolos federados. No entanto, os transportes HTTP padrão no WCF não dão suporte ao uso de esquemas de autenticação federado, como o Microsoft Windows Live ID. O suporte para esse recurso está disponível no momento por meio do uso de segurança da mensagem. Para obter mais informações, consulte Federação e tokens emitidos. |
Escolher um esquema de autenticação
Ao selecionar os possíveis esquemas de autenticação para um servidor HTTP, alguns itens a serem considerados incluem os seguintes:
Considere se o recurso precisa ser protegido. O uso da autenticação HTTP requer a transmissão de mais dados e pode limitar a interoperabilidade com os clientes. Permita o acesso anônimo aos recursos que não precisam ser protegidos.
Se o recurso precisar ser protegido, considere quais esquemas de autenticação fornecem o nível de segurança necessário. O esquema de autenticação padrão mais fraco discutido aqui é a autenticação básica. A autenticação básica não protege as credenciais do usuário. O esquema de autenticação padrão mais forte é a autenticação Negotiate, resultando no protocolo Kerberos.
Um servidor não deve apresentar (por exemplo, nos cabeçalhos WWW-Authentication) qualquer esquema que não esteja preparado para aceitar ou que não proteja adequadamente o recurso protegido. Os clientes são livres para escolher entre qualquer um dos esquemas de autenticação que o servidor apresenta. Alguns clientes são padrão para um esquema de autenticação fraco ou o primeiro esquema de autenticação na lista do servidor.