Autenticação da Internet
As classes System.Net dão suporte a uma variedade de mecanismos de autenticação de cliente, incluindo os métodos de autenticação padrão de Internet básico, digest, negotiate, NTLM e a autenticação Kerberos, bem como métodos personalizados criados por você.
As credenciais de autenticação são armazenadas nas classes NetworkCredential e CredentialCache que implementam a interface ICredentials. Quando uma dessas classes é consultada para credenciais, ela retorna uma instância da classe NetworkCredential. O processo de autenticação é gerenciado pela classe AuthenticationManager e o processo de autenticação real é executado por uma classe de módulo de autenticação que implementa a interface IAuthenticationModule. Você deve registrar um módulo de autenticação personalizado com o AuthenticationManager antes que ele possa ser usado; módulos para métodos de autenticação básica, digest, negotiate, NTLM e Kerberos são registrados por padrão.
NetworkCredential armazena um conjunto de credenciais associadas a um único recurso de Internet identificado por um URI e os retorna em resposta a qualquer chamada para o método GetCredential. A classe NetworkCredential normalmente é usada por aplicativos que acessam um número limitado de recursos da Internet ou por aplicativos que usam o mesmo conjunto de credenciais em todos os casos.
A classe CredentialCache armazena uma coleção de credenciais para vários recursos da Web. Quando o método GetCredential é chamado, CredentialCache retorna o conjunto apropriado de credenciais, conforme determinado pelo URI do recurso da Web e o esquema de autenticação solicitado. Aplicativos que usam uma variedade de recursos de Internet com diferentes esquemas de autenticação se beneficiam do uso da classe CredentialCache, visto que ele armazena todas as credenciais e as fornece conforme solicitado.
Quando um recurso de Internet solicita autenticação, o método WebRequest.GetResponse envia o WebRequest para o AuthenticationManager junto com a solicitação de credenciais. A solicitação é então autenticada acordo com o processo a seguir:
O AuthenticationManager chama o método Authenticate em cada um dos módulos de autenticação registrados na ordem em que eles foram registrados. O AuthenticationManager usa o primeiro módulo que não retorna nulo para executar o processo de autenticação. Os detalhes do processo variam dependendo do tipo de módulo de autenticação envolvido.
Quando o processo de autenticação é concluído, o módulo de autenticação retorna um Authorization para o WebRequest que contém as informações necessárias para acessar o recurso de Internet.
Alguns esquemas de autenticação podem autenticar um usuário sem primeiro fazer uma solicitação para um recurso. Um aplicativo pode economizar tempo pré-autenticando o usuário com o recurso, eliminando assim pelo menos uma viagem de ida e volta ao servidor. Ou então, pode executar a autenticação durante a inicialização de programa a fim de ser mais responsivo para o usuário mais tarde. Esquemas de autenticação que podem usar pré-autenticação definem a propriedade PreAuthenticate como true.