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

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

Канал IPC явным образом поддерживает проверку подлинности и олицетворение. В этом разделе описано, как настроить каналы клиента и сервера.

Платформа .NET Framework позволяет серверам с удаленными объектами осуществлять проверку подлинности и олицетворение вызывающих объектов путем задания свойств, связанных с объектами IpcServerChannel и IpcClientChannel. В отличие от каналов HTTP и TCP, канал IPC выполняет проверку подлинности по умолчанию. При создании объекта IpcServerChannel для данного канала создается список управления доступом. По умолчанию список управления доступом содержит только те учетные данные, от имени которых выполняется серверное приложение. Для взаимодействия с каналом клиент (а следовательно и объект IpcClientChannel) должны выполняться от имени тех же учетных данных. Однако в конфигурации канала IPC можно задать пользователя или группу пользователей Windows, что позволит этому пользователю (или группе) получать доступ к данному каналу.

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

Если требуется предоставить доступ к каналу IPC пользователям, отличным от пользователя, от имени которого выполняется серверное приложение, можно задать пользователя или группу пользователей в свойстве authorizedGroup. Следующий файл конфигурации позволяет всем пользователям в группе Users получать доступ к каналу IPC.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.runtime.remoting>
        <application>
            <service>
                <wellknown mode="SingleCall" type="Server.MyRemoteObject, Server" objectUri="MyRemoteObject.rem" />
            </service>
            <channels>
        <channel ref="ipc" portName="MyIpcChannel" authorizedGroup="Users"/>
            </channels>
        </application>
    </system.runtime.remoting>
</configuration>

Кроме того, канал IPC поддерживает олицетворение. Оно контролируется сервером с помощью свойства impersonate. Следующие параметры конфигурации позволяют включить олицетворение.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.runtime.remoting>
        <application>
            <service>
                <wellknown mode="SingleCall" type="Microsoft.Samples.Implementation.ImplementationClass, Server" objectUri="server.rem" />
            </service>
            <channels>
        <channel ref="ipc" portName="MyIpcChannel" secure="true" impersonate="true" authorizedGroup="Users"/>
            </channels>
        </application>
    </system.runtime.remoting>
</configuration>
ms172351.note(ru-ru,VS.100).gifПримечание
При использовании проверки подлинности канала IPC необходимо все равно устанавливать свойство secure равным true, когда свойство impersonate задается равным true.

ms172351.note(ru-ru,VS.100).gifПримечание
Все процессы выполняются в Windows Vista от имени учетной записи обычного пользователя. Обычные пользователи не могут олицетворять учетную запись администратора. Если приложение, поддерживающее удаленное взаимодействие, должно олицетворять учетную запись администратора, оно должно выполняться с более высоким уровнем привилегий.

Удостоверение прошедшего проверку подлинности клиента можно получить, обратившись к свойству CurrentPrincipal, а затем к его свойству Identity. Удостоверение олицетворяемого клиента можно получить с помощью метода GetCurrent. При необходимости можно выполнить собственную авторизацию.

Канал IPC всегда использует проверку подлинности NTLM. Протокол Kerberos не поддерживается, поскольку канал IPC может осуществлять вызовы только в пределах одного компьютера.

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

Чтобы настроить канал IPC клиента для использования олицетворения, установите свойство tokenImpersonationLevel в значение impersonation, как показано в следующем файле конфигурации.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.runtime.remoting>
        <application>
            <channels>
              <channel ref="ipc" secure="true" tokenImpersonationLevel="impersonation" />
             </channels>
        </application>
    </system.runtime.remoting>
</configuration>
ms172351.note(ru-ru,VS.100).gifПримечание
При использовании проверки подлинности канала IPC необходимо все равно устанавливать свойство secure равным true, когда параметр tokenImpersonationLevel задается равным «impersonation». Для олицетворения свойство impersonate канала сервера должно иметь значение true. Обратите внимание, что на сервере свойство имеет имя impersonate, а на клиенте свойству tokenImpersonationLevel присваивается значение impersonation.

ms172351.note(ru-ru,VS.100).gifПримечание
Все процессы выполняются в Windows Vista от имени учетной записи обычного пользователя. Обычные пользователи не могут олицетворять учетную запись администратора. Если приложение, поддерживающее удаленное взаимодействие, должно олицетворять учетную запись администратора, оно должно выполняться с более высоким уровнем привилегий.

Свойству tokenImpersonationLevel можно присвоить одно из значений, перечисленных в приведенной ниже таблице.

Значение tokenImpersonationLevel Описание

identification

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

impersonation

Сервер может олицетворять контекст безопасности клиента в своей локальной системе. Олицетворение клиента сервером в удаленных системах невозможно.

delegation

Олицетворение клиента сервером в удаленных системах возможно.

ms172351.note(ru-ru,VS.100).gifПримечание
Канал IPC не позволяет задавать другой набор учетных данных как программным образом, так и с помощью файла конфигурации. Поэтому клиент всегда пересылает серверу учетные данные, от имени которых он выполняется.

ms172351.note(ru-ru,VS.100).gifПримечание
Канал IPC использует только проверку подлинности NTLM.

См. также

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

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