Aracılığıyla paylaş


AuthenticationManager.CustomTargetNameDictionary Özellik

Tanım

ve türetilmiş sınıfları kullanılarak WebRequest yapılan istekler için Kerberos kimlik doğrulaması sırasında konakları tanımlamak için kullanılan Hizmet Asıl Adlarını (SPN) içeren sözlüğü alır.

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

Özellik Değeri

Konak bilgilerinden oluşan anahtarlar için SPN değerlerini içeren yazılabilir StringDictionary .

Örnekler

Aşağıdaki kod örneği, içeriğinin görüntülenmesini CustomTargetNameDictionarygösterir.

       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>

*/

Açıklamalar

SPN, istemcinin karşılıklı kimlik doğrulaması amacıyla bir sunucudaki bir hizmet veya uygulama örneğini benzersiz olarak tanımladığı bir addır. Varsayılan olarak karşılıklı kimlik doğrulaması istenir ve isteğinizde olarak ayarlayarak WebRequest.AuthenticationLevelMutualAuthRequired bunu gerekli kılabilirsiniz.

karşılıklı WebRequest kimlik doğrulaması gerektirdiğinde, hedef için SPN istemci tarafından sağlanmalıdır. SPN'yi biliyorsanız, isteği göndermeden önce öğesine ekleyebilirsiniz CustomTargetNameDictionary . Bu sözlüğe SPN bilgileri eklemediyseniz, AuthenticationManager yöntemi en olası SPN'yi oluşturmak için kullanır RequestUri ; ancak bu hesaplanan bir değerdir ve yanlış olabilir. Karşılıklı kimlik doğrulaması denenirse ve başarısız olursa, hesaplanan SPN'yi belirlemek için sözlüğü de kontrol edebilirsiniz. Kimlik doğrulama protokolü karşılıklı kimlik doğrulamasını desteklemiyorsa sözlüğe SPN girilmez.

Bu sözlüğe bir SPN değeri eklemek için anahtarı olarak öğesini RequestUri kullanınAbsoluteUri. Dahili olarak, anahtar , Hostve Port varsayılan bağlantı noktası değilse değerini içerecek Schemeşekilde kesilir.

Uyarı

'nin yöntemlerine ve özelliklerine CustomTargetNameDictionary erişmek için sınırsız WebPermissiongerekir.

Uyarı

Kerberos kimlik doğrulaması bir ara sunucu aracılığıyla gerçekleştirildiğinde, hem ara sunucu hem de nihai ana bilgisayar adının bir SPN'ye çözümlenmesi gerekir. Ara sunucu adı çözümlemesi zaman aşımı ile korunur. Nihai ana bilgisayar adının SPN'ye çözümlenmesi için DNS araması gerekir ve doğrudan bu işlemle ilişkili zaman aşımı yoktur. Bu nedenle zaman uyumlu işlemlerin zaman aşımına uyabilir. Bunun üstesinden gelmek için, istekte bulunmadan önce spn önbelleğine nihai konağın URI ön ekini ekleyin.

Sürüm 3.5 SP1 artık özellik ayarlanmadığında CustomTargetNameDictionary NTLM (NT LAN Manager) kimlik doğrulama değişimindeki SPN'deki istek URL'sinde kullanılan ana bilgisayar adını belirtmek için varsayılandır. İstek URL'sinde kullanılan ana bilgisayar adı, istemci isteğinde System.Net.HttpRequestHeader belirtilen Konak üst bilgisinden farklı olabilir. İstek URL'sinde kullanılan ana bilgisayar adı, sunucunun gerçek ana bilgisayar adından, sunucunun makine adından, bilgisayarın IP adresinden veya geri döngü adresinden farklı olabilir. Bu durumlarda, Windows kimlik doğrulama isteğinde başarısız olur. Sorunu gidermek için, windows'a istemci isteğindeki istek URL'sinde kullanılan ana bilgisayar adının ("contoso", örneğin), yerel bilgisayar için alternatif bir ad olduğunu bildirmeniz gerekebilir.

Şunlara uygulanır

Ayrıca bkz.