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), является альтернативным именем локального компьютера.