AuthenticationManager.CustomTargetNameDictionary Propriedade

Definição

Obtém o dicionário que contém Nomes Principais de Serviço (SPNs) usados para identificar hosts durante a autenticação Kerberos para pedidos feitos usando WebRequest e as suas classes derivadas.

public:
 static property System::Collections::Specialized::StringDictionary ^ CustomTargetNameDictionary { System::Collections::Specialized::StringDictionary ^ get(); };
public static System.Collections.Specialized.StringDictionary CustomTargetNameDictionary { get; }
static member CustomTargetNameDictionary : System.Collections.Specialized.StringDictionary
Public Shared ReadOnly Property CustomTargetNameDictionary As StringDictionary

Valor de Propriedade

Um gravável StringDictionary que contém os valores SPN para chaves compostos por informação do hospedeiro.

Exemplos

O exemplo de código seguinte demonstra a exibição do conteúdo do CustomTargetNameDictionary.

       public static void RequestResource(Uri resource)
        {
            // Set policy to send credentials when using HTTPS and basic authentication.

            // Create a new HttpWebRequest object for the specified resource.
            WebRequest request=(WebRequest) WebRequest.Create(resource);
            // Supply client credentials for basic authentication.
            request.UseDefaultCredentials = true;
            request.AuthenticationLevel = AuthenticationLevel.MutualAuthRequired;
            HttpWebResponse response = (HttpWebResponse) request.GetResponse();
            // Determine mutual authentication was used.
            Console.WriteLine("Is mutually authenticated? {0}", response.IsMutuallyAuthenticated);

             System.Collections.Specialized.StringDictionary spnDictionary = AuthenticationManager.CustomTargetNameDictionary;
            foreach (System.Collections.DictionaryEntry e in spnDictionary)
            {
                Console.WriteLine("Key: {0}  - {1}", e.Key as string, e.Value as string);
            }
            // Read and display the response.
            System.IO.Stream streamResponse = response.GetResponseStream();
            System.IO.StreamReader streamRead = new System.IO.StreamReader(streamResponse);
            string responseString = streamRead.ReadToEnd();
            Console.WriteLine(responseString);
            // Close the stream objects.
            streamResponse.Close();
            streamRead.Close();
            // Release the HttpWebResponse.
            response.Close();
        }

/*

The output from this example will differ based on the requested resource
and whether mutual authentication was successful. For the purpose of illustration,
a sample of the output is shown here:

Is mutually authenticated? True
Key: http://server1.someDomain.contoso.com  - HTTP/server1.someDomain.contoso.com

<html>
...
</html>

*/

Observações

Um SPN é um nome pelo qual um cliente identifica de forma única uma instância de um serviço ou aplicação num servidor para efeitos de autenticação mútua. A autenticação mútua é solicitada por defeito, e pode exigir definindo WebRequest.AuthenticationLevel como MutualAuthRequired no seu pedido.

Quando a WebRequest requer autenticação mútua, o SPN para o destino deve ser fornecido pelo cliente. Se souber o SPN, pode adicioná-lo CustomTargetNameDictionary antes de enviar o pedido. Se não tiver adicionado informação SPN a este dicionário, o AuthenticationManager usa o RequestUri método para compor o SPN mais provável; no entanto, este é um valor calculado e pode estar incorreto. Se a autenticação mútua for tentada e falhar, pode verificar o dicionário para determinar o SPN calculado. Nenhuma SPN é introduzida no dicionário se o protocolo de autenticação não suportar autenticação mútua.

Para adicionar um valor SPN a este dicionário, use o AbsoluteUri de RequestUri como chave. Internamente, a chave é truncada para incluir o Scheme, Host, e o Port se não for a porta padrão.

Note

Aceder aos métodos e propriedades do CustomTargetNameDictionary requer irrestrições WebPermission.

Note

Quando a autenticação Kerberos é realizada através de um proxy, tanto o proxy como o nome final do host precisam de ser resolvidos para um SPN. A resolução do nome proxy é protegida por um timeout. A resolução do nome final do host para um SPN requer uma consulta DNS, e não existe um timeout diretamente associado a esta operação. Por isso, as operações síncronas podem demorar mais tempo a expirar. Para ultrapassar isto, adicione o prefixo URI do host final à cache SPN antes de fazer pedidos a ele.

A versão 3.5 SP1 passa agora a especificar por defeito o nome de host usado na URL de pedido no SPN na troca de autenticação NTLM (NT LAN Manager) quando a CustomTargetNameDictionary propriedade não está definida. O nome do host usado na URL do pedido pode ser diferente do cabeçalho Host especificado no System.Net.HttpRequestHeader pedido no cliente. O nome do host usado na URL do pedido pode ser diferente do nome real do servidor, do nome da máquina do servidor, do endereço IP do computador ou do endereço de loopback. Nestes casos, o Windows falhará o pedido de autenticação. Para resolver o problema, pode ser necessário notificar o Windows que o nome do host usado na URL do pedido no pedido do cliente ("contoso", por exemplo) é, na verdade, um nome alternativo para o computador local.

Aplica-se a

Ver também