Freigeben über


AuthenticationManager.CustomTargetNameDictionary Eigenschaft

Definition

Ruft das Wörterbuch ab, das Dienstprinzipalnamen (Service Principal Names, SPNs) enthält, die verwendet werden, um Hosts während der Kerberos-Authentifizierung für Anforderungen zu identifizieren, die mit und WebRequest den abgeleiteten Klassen vorgenommen wurden.

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

Eigenschaftswert

Eine schreibbare Eigenschaft StringDictionary , die die SPN-Werte für Schlüssel enthält, die aus Hostinformationen bestehen.

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie der Inhalt der CustomTargetNameDictionaryDatei angezeigt wird.

       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>

*/

Hinweise

Ein SPN ist ein Name, mit dem ein Client eine Instanz eines Diensts oder einer Anwendung auf einem Server für die gegenseitige Authentifizierung eindeutig identifiziert. Die gegenseitige Authentifizierung wird standardmäßig angefordert, und Sie können sie anfordern, indem Sie sie in Ihrer Anforderung festlegen WebRequest.AuthenticationLevelMutualAuthRequired .

Wenn eine WebRequest gegenseitige Authentifizierung erforderlich ist, muss der SPN für das Ziel vom Client bereitgestellt werden. Wenn Sie den SPN kennen, können Sie ihn vor dem CustomTargetNameDictionary Senden der Anforderung hinzufügen. Wenn Sie diesem Wörterbuch keine SPN-Informationen hinzugefügt haben, verwendet RequestUri die AuthenticationManager Methode, um den höchstwahrscheinlichen SPN zu verfassen. Dies ist jedoch ein berechneter Wert und ist möglicherweise falsch. Wenn die gegenseitige Authentifizierung versucht wird und ein Fehler auftritt, können Sie das Wörterbuch überprüfen, um den berechneten SPN zu ermitteln. Es wird kein SPN in das Wörterbuch eingegeben, wenn das Authentifizierungsprotokoll die gegenseitige Authentifizierung nicht unterstützt.

Um diesem Wörterbuch einen SPN-Wert hinzuzufügen, verwenden Sie den AbsoluteUriRequestUri Als Schlüssel. Intern wird der Schlüssel abgeschnitten, um den SchemeHost, und wenn Port er nicht der Standardport ist.

Hinweis

Zugriff auf die Methoden und Eigenschaften der CustomTargetNameDictionary benötigten uneingeschränkten WebPermission.

Hinweis

Wenn die Kerberos-Authentifizierung über einen Proxy ausgeführt wird, müssen sowohl der Proxy als auch der ultimative Hostname in einen SPN aufgelöst werden. Die Proxynamenauflösung wird durch ein Timeout geschützt. Für die Auflösung des ultimativen Hostnamens für einen SPN ist eine DNS-Suche erforderlich, und dieser Vorgang ist kein Timeout zugeordnet. Daher können synchrone Vorgänge länger bis zum Timeout dauern. Um dies zu überwinden, fügen Sie das URI-Präfix des ultimativen Hosts zum SPN-Cache hinzu, bevor Sie Anforderungen an ihn senden.

Version 3.5 SP1 gibt nun standardmäßig den Hostnamen an, der in der Anforderungs-URL im SPN im NTLM-Authentifizierungsaustausch (NT LAN Manager) verwendet wird, wenn die CustomTargetNameDictionary Eigenschaft nicht festgelegt ist. Der in der Anforderungs-URL verwendete Hostname unterscheidet sich möglicherweise von dem Hostheader, der in der System.Net.HttpRequestHeader Clientanforderung angegeben ist. Der in der Anforderungs-URL verwendete Hostname unterscheidet sich möglicherweise von dem tatsächlichen Hostnamen des Servers, dem Computernamen des Servers, der IP-Adresse des Computers oder der Loopbackadresse. In diesen Fällen schlägt Windows die Authentifizierungsanforderung fehl. Um das Problem zu beheben, müssen Sie Möglicherweise Windows benachrichtigen, dass der hostname, der in der Anforderungs-URL in der Clientanforderung verwendet wird ("contoso", z. B. "contoso"), tatsächlich ein alternativer Name für den lokalen Computer ist.

Gilt für:

Weitere Informationen