Сущность технологии COM




COM и защита - часть 8


Эта величина определяет также минимальный уровень аутентификации, используемый новыми интерфейсными заместителями, которые возвращаются API-функциями или методами COM. Создавая новый интерфейсный заместитель во время демаршалинга, COM рассматривает число, обозначающее нижний уровень аутентификации, заданный экспортером, как часть разрешения OXID. Затем COM устанавливает уровень аутентификации нового заместителя равным или нижнему уровню экспортера, или нижнему уровню текущего процесса — в зависимости от того, какой из них выше. Если процесс, импортирующий объектную ссылку, имеет уровень аутентификации ниже, чем экспортирующий процесс, то для установки уровня аутентификации используется нижний уровень экспортера. Такой способ гарантирует, что любые ORPC-запросы, посылаемые интерфейсным заместителем, пройдут через нижний уровень экспортера. Далее в этой главе будет рассмотрено, как с целью более детального контроля можно явным образом изменить уровень аутентификации для отдельного интерфейсного заместителя.

Шестой параметр функции CoInitializeSecurity, dwImpLevel применяется для импортируемых объектных ссылок. Величина, определенная для этого параметра, устанавливает уровень заимствования прав (impersonation level), используемый для всех объектных ссылок, которые возвращаются функцией CoUnmarshalInterface. Уровень заимствования прав позволяет одному процессу заимствовать атрибуты защиты у другого процесса и отражает степень доверия, которое клиент испытывает к серверу. Этот параметр должен принимать одно из следующих четырех значений, характеризующих уровень заимствования прав:

enum { // hide credentials of caller from object // скрываем от объекта полномочия вызывающей программы RPC_C_IMP_LEVEL_ANONYMOUS = 1, // allow object to query credentials of caller // разрешаем объекту запрашивать полномочия вызывающей программы RPC_C_IMP_LEVEL_IDENTIFY = 2, // allow use of caller's credentials up to one-hop away // разрешаем использовать полномочия вызывающей // программы не далее одной сетевой передачи RPC_C_IMP_LEVEL_IMPERSONATE = 3, // allow use of caller's credentials across multiple hops // разрешаем использовать полномочия вызывающей // программы в течение нескольких сетевых передач RPC_C_IMP_LEVEL_DELEGATE = 4 };




Содержание  Назад  Вперед