AuthenticationManager.CustomTargetNameDictionary Egenskap
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Hämtar ordlistan som innehåller tjänsthuvudnamn (SPN) som används för att identifiera värdar under Kerberos-autentisering för begäranden som görs med hjälp av WebRequest och dess härledda klasser.
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
Egenskapsvärde
En skrivbar StringDictionary som innehåller SPN-värdena för nycklar som består av värdinformation.
Exempel
I följande kodexempel visas innehållet i 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>
*/
Kommentarer
Ett SPN är ett namn med vilket en klient unikt identifierar en instans av en tjänst eller ett program på en server för ömsesidig autentisering. Ömsesidig autentisering begärs som standard och du kan kräva det genom att ange WebRequest.AuthenticationLevel i MutualAuthRequired din begäran.
När en WebRequest kräver ömsesidig autentisering måste SPN för målet anges av klienten. Om du känner till SPN kan du lägga till CustomTargetNameDictionary det i innan du skickar begäran. Om du inte har lagt till SPN-information i den här ordlistan AuthenticationManager använder RequestUri metoden för att skapa det mest sannolika SPN:et. Detta är dock ett beräknat värde och kan vara felaktigt. Om ömsesidig autentisering görs och misslyckas kan du kontrollera ordlistan för att fastställa det beräknade SPN:et. Inget SPN anges i ordlistan om autentiseringsprotokollet inte stöder ömsesidig autentisering.
Om du vill lägga till ett SPN-värde i den här ordlistan använder du AbsoluteUri som RequestUri nyckel. Internt trunkeras nyckeln så att den Schemeinnehåller , Hostoch Port om den inte är standardporten.
Note
Åtkomst till metoderna och egenskaperna för CustomTargetNameDictionary kräver obegränsad WebPermission.
Note
När Kerberos-autentisering utförs via en proxyserver måste både proxyn och det ultimata värdnamnet matchas till ett SPN. Proxynamnmatchningen skyddas av en tidsgräns. Lösning av det ultimata värdnamnet till ett SPN kräver en DNS-sökning, och det finns ingen tidsgräns som är kopplad direkt till den här åtgärden. Därför kan synkrona åtgärder ta längre tid att överskrida tidsgränsen. Du kan lösa detta genom att lägga till den ultimata värdens URI-prefix i SPN-cachen innan du skickar begäranden till den.
Version 3.5 SP1 anger nu som standard det värdnamn som används i begärande-URL:en i SPN i NTLM-autentiseringsutbytet (NT LAN Manager) när CustomTargetNameDictionary egenskapen inte har angetts. Värdnamnet som används i begärande-URL:en kan skilja sig från värdrubriken System.Net.HttpRequestHeader som anges i i klientbegäran. Värdnamnet som används i begärande-URL:en kan skilja sig från serverns faktiska värdnamn, datorns namn på servern, datorns IP-adress eller loopback-adressen. I dessa fall misslyckas Windows autentiseringsbegäran. För att åtgärda problemet kan du behöva meddela Windows att värdnamnet som används i begärande-URL:en i klientbegäran ("contoso", till exempel) faktiskt är ett alternativt namn för den lokala datorn.