Объекты Principal и Identity

Примечание.

Эта статья применима к Windows.

Сведения о ASP.NET Core см. в разделе ASP.NET Core Security.

Управляемый код может обнаружить удостоверение или роль субъекта через IPrincipal объект, содержащий ссылку на IIdentity объект. Может быть полезно сравнить объекты Identity и Principal с привычными понятиями, такими как учетные записи пользователей и групп. В большинстве сетевых сред учетные записи пользователей представляют пользователей или программы, а учетные записи групп — определенные категории пользователей и предоставленные им права. Аналогичным образом объекты удостоверений .NET представляют пользователей, а роли представляют членство и контексты безопасности. В .NET основной объект инкапсулирует как объект удостоверения, так и роль. Приложения .NET предоставляют права субъекту на основе его удостоверений или, как правило, его членства в роли.

Объекты Identity

Identity — объект инкапсулирует сведения о проверяемом пользователе или сущности. На самом базовом уровне объект Identity содержит имя и тип проверки подлинности. В качестве имени может использоваться имя пользователя или учетной записи Windows, тогда как типом проверки подлинности может быть поддерживаемый протокол входа в систему, например Kerberos V5 или пользовательское значение. .NET определяет GenericIdentity объект, который можно использовать для большинства пользовательских сценариев входа в систему и более специализированный WindowsIdentity объект, который можно использовать, если требуется, чтобы приложение использовало проверка подлинности Windows. Кроме того, можно определить свой собственный класс Identity, который инкапсулирует особую информацию пользователя.

Интерфейс IIdentity определяет свойства для доступа к имени и типу проверки подлинности, например Kerberos V5 или NTLM. Все классы Identity реализуют интерфейс IIdentity. Между объектом Identity и маркером процесса Windows, в котором в настоящее время выполняется поток, не требуется. Однако если объект Identity является объектом WindowsIdentity , предполагается, что удостоверение представляет маркер безопасности Windows.

Объекты Principal

Объект Principal, представляющий контекст безопасности, в котором работает код. Приложения, реализующие безопасность на основе ролей, предоставляют права на основании роли, связанной с объектом Principal. Как и объекты удостоверений, .NET предоставляет GenericPrincipal объект и WindowsPrincipal объект. Можно также определить собственные пользовательские классы Principal.

Интерфейс IPrincipal определяет свойство для доступа к связанному объекту Identity , а также методу определения того, является ли пользователь, идентифицированный объектом-субъектом , членом данной роли. Все классы Principal реализуют интерфейс IPrincipal, а также любые необходимые дополнительные свойства и методы. Например, среда CLR предоставляет класс WindowsPrincipal , который реализует дополнительные функции для сопоставления членства в группах с ролями.

Объект Principal привязан к объекту контекста вызова (CallContext) в домене приложения (AppDomain). Контекст вызова по умолчанию всегда создается с каждым новым AppDomain, поэтому всегда доступен контекст вызова для принятия объекта Principal . При создании нового потока для него также создается объект CallContext. Ссылка на объект Principal автоматически копируется из создаваемого потока в объект CallContext нового потока. Если среда выполнения не может определить, какой объект Principal принадлежит создателю потока, она применяет политику по умолчанию для создания объектов Principal и Identity.

Настраиваемая политика для домена приложения определяет правила выбора типа объекта Principal для связи с новым доменом приложения. Если позволяет политика безопасности, среда выполнения может создать объекты Principal и Identity, которые отражают токен операционной системы, связанный с текущим потоком выполнения. По умолчанию среда выполнения использует объекты Principal и Identity, представляющие пользователей, не прошедших проверку подлинности. Среда выполнения не создаст такие объекты Principal и Identity, пока код не попытается получить к ним доступ.

Доверенный код, создающий домен приложения, может установить политику домена приложения, которая управляет процессом создания объектов по умолчанию Principal и Identity. Такая политика домена приложения применяется ко всем выполняемым потокам в данном домене приложения. Неуправляемый доверенный узел, по сути, имеет возможность задать эту политику, но управляемый код, который задает эту политику, должен иметь System.Security.Permissions.SecurityPermission контроль над политикой домена.

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

См. также