Проверка подлинности для канала HTTP

Этот раздел относится к технологии прежних версий, которая сохраняется для обеспечения обратной совместимости с существующими приложениями и не рекомендуется для разработки новых приложений. Сейчас распределенные приложения следует создавать с помощью  Windows Communication Foundation (WCF).

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

Конфигурация сервера

Вся настройка проверки подлинности на сервере осуществляется через службы IIS. Параметры конфигурации сервера, связанные с проверкой подлинности для канала HttpChannel, отсутствуют. Дополнительные сведения о службах IIS и настройке проверки подлинности см. в разделе Проверка подлинности IIS.

Конфигурация клиента

При вызове размещенного в службах IIS удаленного объекта, для которого настроена проверка подлинности, клиент должен указать учетные данные. Чтобы автоматически отправить учетные данные, от имени которых выполняется приложение, установите свойство useDefaultCredentials равным true:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.runtime.remoting>
    <application>
      <channels>
        <channel ref="http" useDefaultCredentials="true"/>
      </channels>
      <client>
        <wellknown 
           url="http://MyServer/IISSec/MyRemoteObj.rem"
           type="Shared.MyRemoteObj, Shared"/>
      </client>
    </application>
  </system.runtime.remoting>
</configuration>

Если требуется задать альтернативный набор учетных данных, это можно сделать программным образом, как показано в следующем примере кода:

MyRemoteObj obj = new MyRemoteObj();
// Get the current set of channel sink properties
IDictionary props = ChannelServices.GetChannelSinkProperties(obj);
// Set domain, username, and password properties
props["domain"] = "SomeDomain";
props["username"] = "SomeUser";
props["password"] = "SomePassword123";
Console.WriteLine(obj.SayHello());

Кроме того, можно программным образом задать свойство credentials, в котором указывается класс, реализующий интерфейс ICredentials. Сначала создайте класс, реализующий интерфейс ICredentials:

namespace MyCredentialsLib
{
    public class MyCredentials : ICredentials
    {
        public NetworkCredential GetCredential(Uri uri, string authType)
        {
            Console.WriteLine("MyCredentials.GetCredential() called");
            NetworkCredential newCred = new NetworkCredential("SomeRemotingUser", "SomePassword");
            return newCred;
        }
    }
} 

Затем в клиенте необходимо создать экземпляр класса, реализующего интерфейс ICredentials, и присвоить этот экземпляр свойству credentials, как показано в следующем примере кода:

RemotingConfiguration.Configure("client.exe.config", false);
MyRemoteObj obj = new MyRemoteObj();
IDictionary props = ChannelServices.GetChannelSinkProperties(obj);
MyCredentials credentials = new MyCredentials();
props["credentials"] = credentials;
Console.WriteLine(obj.SayHello()); 
36tfwzb0.note(ru-ru,VS.100).gifПримечание
Не рекомендуется жестко задавать учетные данные в коде приложения. В данных примерах это делается только с целью демонстрации.

Свойство useAuthenticatedConnectionSharing указывает, использует ли серверный канал прошедшие проверку подлинности подключения повторно вместо проверки подлинности каждого входящего вызова. Это свойство по умолчанию имеет значение true, если свойство useDefaultCredentials имеет значение true. Это свойство можно задать в файле конфигурации (в элементе <channel>) или программным образом (точно так же, как задавались свойства username и password в приведенном выше образце кода).

Свойство unsafeAuthenticatedConnectionSharing указывает, что клиент предоставляет собственные учетные данные и имя группы подключений, которые сервер использует для создания прошедшей проверку подлинности группы подключений. Если это свойство имеет значение true, необходимо присвоить свойству connectionGroupName имя одного прошедшего проверку подлинности пользователя. Если свойству useAuthenticatedConnectionSharing присвоено значение true, это свойство игнорируется.

См. также

Основные понятия

Проверка подлинности для канала TCP
Проверка подлинности для канала IPC
Шифрование и целостность сообщений