AuthenticationManager.CustomTargetNameDictionary Eigenschap

Definitie

Hiermee haalt u de woordenlijst op die SPN's (Service Principal Names) bevat die worden gebruikt om hosts te identificeren tijdens Kerberos-verificatie voor aanvragen die zijn gemaakt met behulp van WebRequest en de afgeleide klassen.

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

Waarde van eigenschap

Een beschrijfbaar StringDictionary dat de SPN-waarden bevat voor sleutels die bestaan uit hostgegevens.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe de inhoud van het CustomTargetNameDictionarybestand wordt weergegeven.

       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>

*/

Opmerkingen

Een SPN is een naam waarmee een client een exemplaar van een service of toepassing op een server uniek identificeert voor wederzijdse verificatie. Wederzijdse verificatie wordt standaard aangevraagd en u kunt deze vereisen door in uw aanvraag in te MutualAuthRequired stellenWebRequest.AuthenticationLevel.

Wanneer wederzijdse WebRequest verificatie is vereist, moet de SPN voor de bestemming worden opgegeven door de client. Als u de SPN kent, kunt u deze toevoegen aan de CustomTargetNameDictionary aanvraag voordat u de aanvraag verzendt. Als u geen SPN-gegevens aan deze woordenlijst hebt toegevoegd, gebruikt RequestUri de AuthenticationManager methode om de meest waarschijnlijke SPN op te stellen. Dit is echter een berekende waarde en is mogelijk onjuist. Als wederzijdse verificatie wordt geprobeerd en mislukt, kunt u de woordenlijst controleren om de berekende SPN te bepalen. Er wordt geen SPN ingevoerd in de woordenlijst als het verificatieprotocol geen ondersteuning biedt voor wederzijdse verificatie.

Als u een SPN-waarde wilt toevoegen aan deze woordenlijst, gebruikt u de AbsoluteUriRequestUri sleutel als de sleutel. Intern wordt de sleutel afgekapt om de Scheme, Hosten de Port standaardpoort op te nemen.

Note

Toegang tot de methoden en eigenschappen van de CustomTargetNameDictionary vereist onbeperkte WebPermission.

Note

Wanneer Kerberos-verificatie wordt uitgevoerd via een proxy, moeten zowel de proxy als de ultieme hostnaam worden omgezet in een SPN. De proxynaamomzetting wordt beveiligd door een time-out. Voor de oplossing van de ultieme hostnaam naar een SPN is een DNS-zoekactie vereist en er is geen time-out die rechtstreeks aan deze bewerking is gekoppeld. Daarom kunnen synchrone bewerkingen langer duren voordat er een time-out opgetreden is. Om dit te verhelpen, voegt u het URI-voorvoegsel van de ultieme host toe aan de SPN-cache voordat u er aanvragen aan doet.

Versie 3.5 SP1 geeft nu standaard de hostnaam op die wordt gebruikt in de aanvraag-URL in de SPN in de NTLM-verificatieuitwisseling (NT LAN Manager) wanneer de CustomTargetNameDictionary eigenschap niet is ingesteld. De hostnaam die in de aanvraag-URL wordt gebruikt, kan afwijken van de hostheader die is opgegeven in de System.Net.HttpRequestHeader clientaanvraag. De hostnaam die in de aanvraag-URL wordt gebruikt, kan afwijken van de werkelijke hostnaam van de server, de computernaam van de server, het IP-adres van de computer of het loopback-adres. In dergelijke gevallen mislukt Windows de verificatieaanvraag. Om het probleem op te lossen, moet u mogelijk Windows melden dat de hostnaam die wordt gebruikt in de aanvraag-URL in de clientaanvraag (bijvoorbeeld contoso) een alternatieve naam is voor de lokale computer.

Van toepassing op

Zie ook