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 bir yazılabilir StringDictionary .

Örnekler

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

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 = dynamic_cast<WebRequest^>(WebRequest::Create( resource ));

   // Supply client credentials for basic authentication.
   request->UseDefaultCredentials = true;
   request->AuthenticationLevel = AuthenticationLevel::MutualAuthRequired;
   HttpWebResponse^ response = dynamic_cast<HttpWebResponse^>(request->GetResponse());

   // Determine mutual authentication was used.
   Console::WriteLine( L"Is mutually authenticated? {0}", response->IsMutuallyAuthenticated );
   System::Collections::Specialized::StringDictionary^ spnDictionary = AuthenticationManager::CustomTargetNameDictionary;
   System::Collections::IEnumerator^ myEnum = spnDictionary->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      DictionaryEntry^ e = safe_cast<DictionaryEntry^>(myEnum->Current);
      Console::WriteLine( "Key: {0}  - {1}", dynamic_cast<String^>(e->Key), dynamic_cast<String^>(e->Value) );
   }

   // Read and display the response.
   System::IO::Stream^ streamResponse = response->GetResponseStream();
   System::IO::StreamReader^ streamRead = gcnew 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>

*/
       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 sunucudaki bir hizmet veya uygulama örneğini benzersiz olarak tanımladığı bir addır. Karşılıklı kimlik doğrulaması varsayılan olarak istenir ve isteğinizde olarak ayarlayarak WebRequest.AuthenticationLevelMutualAuthRequired bunu zorunlu 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 CustomTargetNameDictionary ekleyebilirsiniz. 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 SPN değeri eklemek için anahtarı olarak değerini RequestUri kullanınAbsoluteUri. Dahili olarak, anahtarı , Hostve Port varsayılan bağlantı noktası değilse içerecek Schemeşekilde kesilir.

Not

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

Not

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 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ı süresi daha uzun sürebilir. Bunun üstesinden gelmek için, istekte bulunmadan önce SPN önbelleğine üst düzey konağın URI ön ekini ekleyin.

Sürüm 3.5 SP1 artık özellik ayarlanmadığında NTLM (NT LAN Manager) kimlik doğrulama değişimindeki SPN'deki istek URL'sinde kullanılan ana bilgisayar adını belirtmeyi CustomTargetNameDictionary varsayılan olarak belirler. İ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 gibi 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) aslında yerel bilgisayar için alternatif bir ad olduğunu bildirmeniz gerekebilir.

Şunlara uygulanır

Ayrıca bkz.