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


Задание политики безопасности, основанной на ролях и участниках

Безопасность, основанная на ролях, позволяет компоненту идентифицировать текущих пользователей и связанные с ними роли во время выполнения. Затем для определения набора разрешений, предоставляемых во время выполнения, производится преобразование этих сведений с использованием политики безопасности кодового доступа. Для заданного домена приложений в узле можно изменить политику безопасности, основанную на ролях по умолчанию, и установить участника безопасности, используемого по умолчанию. Участник безопасности — это пользователь и роли, связанные с данным пользователем.

Безопасность, основанная на ролях, чаще всего используется для реализации нестандартных схем проверки подлинности. Например, узел ASP.NET использует безопасность на основе ролей для реализации схемы проверки подлинности, основанной на пользовательских данных, получаемых от служб IIS (Internet Information Services).

Определение пользователя и ролей пользователя зависит от приложения. Приложение может иметь концепцию пользователя, отличающуюся от принятой в Windows. Например, при входе в приложение оно может запросить ввод имени пользователя и его пароля. Эти данные по имени и паролю пользователя не зависят от имени и пароля, с которыми пользователь вошел в систему Windows.

Явное задание участника для потока

Если для потока задан участник, тогда участник по умолчанию и политика для домена приложений игнорируются. Например, для потока может быть задан собственный участник с помощью статического свойства CurrentPrincipal (свойство Shared в Visual Basic) класса Thread. В альтернативном варианте поток может получить своего участника из потока, который запустил данный поток.

ПримечаниеПримечание

В .NET Framework версии 2.0 когда поток запускает другой поток или ставит в очередь элемент работы для выполнения пулом потоков, контекст (включая участника безопасности) потока автоматически перетекает в дочерний поток или поток пула потоков.В .NET Framework версий 1.0 и 1.1 контекст перетекал только в потоки, запускаемые потоком, но не в потоки пула потоков.

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

ПримечаниеПримечание

Когда поток, не имеющий участника безопасности, использует статическое свойство CurrentPrincipal, чтобы запросить участника, для задания участника применяются значения по умолчанию из домена приложений.Это означает, что свойство CurrentPrincipal никогда не возвращает значение null.

Политика и участник по умолчанию для домена приложений

В узле может быть задан участник по умолчанию для домена приложений путем вызова метода SetThreadPrincipal. Если участник по умолчанию предоставлен, он назначается любому потоку, выполняющемуся в домене приложений.

ПримечаниеПримечание

Участник по умолчанию не применяется автоматически к потоку, который вызывает метод SetThreadPrincipal, даже если этот поток не имеет участника.Если потоку позже потребуется участник, а он между тем не будет получен, потоку назначается участник согласно политике и в соответствии с участником по умолчанию из домена приложений, в котором поток выполняется в данный момент.

Если участник по умолчанию не установлен для домена приложений, потоку назначается участник согласно политике, существующей для домена приложений. По умолчанию политикой домена приложений должен назначаться потоку не прошедший проверку подлинности общий участник. В узле можно изменить эту политику для домена приложений путем вызова метода SetPrincipalPolicy. Например, следующий управляемый код создает домен приложений и устанавливает его политику на использование текущего участника Windows.

Dim ad As AppDomain = AppDomain.CreateDomain("Child")
ad.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal)
AppDomain ad = AppDomain.CreateDomain("Child");
ad.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
AppDomain^ ad = AppDomain::CreateDomain("Child");
ad->SetPrincipalPolicy(PrincipalPolicy::WindowsPrincipal);

Неуправляемый узел может получить доступ к доменам приложений, используя интерфейс _AppDomain, который сохраняет порядок виртуальной таблицы по разным версиям .NET Framework.

См. также

Ссылки

System.AppDomain

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

Общие сведения о размещении

Безопасность на основе ролей

Другие ресурсы

Основные понятия безопасности