Поделиться через


AuthenticationManager.CustomTargetNameDictionary Свойство

Определение

Получает словарь, содержащий имена субъектов-служб (SPN), которые используются для идентификации узлов во время проверки подлинности Kerberos для запросов, выполненных с использованием WebRequest и производными классами.

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

Значение свойства

Записываемый объект StringDictionary , содержащий значения имени субъекта-службы для ключей, состоящих из сведений о узле.

Примеры

В следующем примере кода показано отображение содержимого объекта 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>

*/

Комментарии

Имя субъекта-службы — это имя, с помощью которого клиент однозначно идентифицирует экземпляр службы или приложения на сервере для взаимной проверки подлинности. Взаимная проверка подлинности запрашивается по умолчанию, и ее можно требовать, установив WebRequest.AuthenticationLevel в запросе значение MutualAuthRequired .

Если требуется взаимная проверка подлинности, имя участника-службы WebRequest для назначения должно предоставляться клиентом. Если вы знаете имя участника-службы, его можно добавить в CustomTargetNameDictionary перед отправкой запроса. Если в этот словарь не добавлены сведения об имени участника-службы, AuthenticationManager метод используется RequestUri для создания наиболее вероятного имени субъекта-службы. Однако это вычисляемое значение и может быть неверным. Если взаимная проверка подлинности выполняется и завершается ошибкой, можно проверить словарь, чтобы определить вычисленное имя субъекта-службы. Имя участника-службы не вводится в словарь, если протокол проверки подлинности не поддерживает взаимную проверку подлинности.

Чтобы добавить значение имени участника-службы в этот словарь, используйте AbsoluteUriRequestUri его в качестве ключа. Внутри системы ключ усечен для включения Scheme, Hostа также если Port он не является портом по умолчанию.

Замечание

Для доступа к методам и свойствам CustomTargetNameDictionary требуется неограниченное число WebPermission.

Замечание

При проверке подлинности Kerberos через прокси-сервер необходимо разрешить имя прокси-сервера и конечного имени узла в имя субъекта-службы. Разрешение имен прокси-сервера защищено временем ожидания. Для разрешения конечного имени узла имени субъекта-службы требуется поиск DNS, и время ожидания не связано непосредственно с этой операцией. Поэтому синхронные операции могут занять больше времени ожидания. Чтобы преодолеть эту проблему, добавьте префикс URI конечного узла в кэш субъекта-службы перед выполнением запросов к нему.

Версия 3.5 с пакетом обновления 1 (SP1) теперь используется по умолчанию, чтобы указать имя узла, используемое в URL-адресе запроса в службе spN в обмене проверкой подлинности NTLM (NT LAN Manager), если CustomTargetNameDictionary свойство не задано. Имя узла, используемое в URL-адресе запроса, может отличаться от заголовка узла, указанного в запросе System.Net.HttpRequestHeader клиента. Имя узла, используемое в URL-адресе запроса, может отличаться от фактического имени узла сервера, имени компьютера, IP-адреса компьютера или адреса обратного цикла. В этих случаях Windows завершится сбоем запроса проверки подлинности. Чтобы устранить проблему, может потребоваться уведомить Windows о том, что имя узла, используемое в URL-адресе запроса клиента (например, contoso), является альтернативным именем локального компьютера.

Применяется к

См. также раздел