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


Основы пользовательских операций в .NET Framework

Обновлен: Ноябрь 2007

.NET Framework обеспечивает механизм безопасности на основе ролей в пространстве имен System.Security.Principal, который можно использовать для авторизации и проверки подлинности пользователей в приложении. В этом разделе рассматривается использование авторизации приложения в .NET Framework и создание объектов IIdentity и IPrincipal для представления пользователей.

Объект IIdentity инкапсулирует пользователя, прошедшего проверку. Объект IPrincipal сочетает удостоверение пользователя и роли, которые он имеет. Можно использовать предварительно определенные классы удостоверений и классы участников в пространстве имен System.Security.Principal или можно добавить пользовательскую проверку подлинности путем создания классов, которые реализуют эти интерфейсы.

Чтобы использовать эти интерфейсы, необходимо задать полные имена интерфейсов или импортировать соответствующие пространства имен путем включения операторов Imports в начале соответствующего файла исходного кода. Дополнительные сведения см. в разделе Оператор Imports (пространство имен .NET и тип);

Использование безопасности на основе ролей в приложениях .NET Framework

С каждым потоком приложения может быть связан объект участника (доступный через свойство CurrentPrincipal), который представляет контекст безопасности пользователя, от чьего имени выполняется код. Основной объект инкапсулирует объект контекста безопасности (или удостоверения) пользователя. Использование двух объектов позволяет отделить проверку подлинности (в объекте удостоверения) от авторизации (в объекте участника).

Объект удостоверения должен реализовать интерфейс IIdentity. Объект удостоверения представляет конкретного пользователя и предоставляет следующие свойства, необходимые интерфейсу IIdentity: Name, IsAuthenticated и AuthenticationType. Объекты удостоверения обычно имеют дополнительные закрытые члены, которые выполняют проверку подлинности пользователя.

Объект участника должен реализовать интерфейс IPrincipal. Объект участника инкапсулирует контекст безопасности пользователя, предоставляя следующие члены, необходимые интерфейсу IPrincipal: метод IsInRole, выполняющий авторизацию, и свойство Identity, предоставляющее доступ к объекту удостоверения пользователя.

Работа с удостоверениями

В .NET Framework имеется четыре класса, реализующих интерфейс IIdentity:

Каждый класс позволяет работать с различными видами удостоверений пользователей. Чтобы получить доступ к текущему объекту WindowsIdentity для приложения, использующего проверку подлинности Windows, используйте статический метод WindowsIdentity класса GetCurrent. Чтобы задать участника текущего потока, можно вызвать Метод My.User.InitializeWithWindowsUser.

Можно также создать классы пользовательских удостоверений с помощью реализации интерфейса IIdentity в собственных пользовательских классах. Дополнительные сведения о создании пользовательских удостоверений см. в разделе Пошаговое руководство. Реализация пользовательской проверки подлинности и авторизации.

Работа с участниками

.NET Framework предоставляет интерфейс IPrincipal для связывания пользовательских ролей с удостоверениями. Если приложение выполняет авторизацию, в нем следует использовать объект, реализующий интерфейс IPrincipal. Например, классы WindowsIdentity и GenericIdentity предоставляют встроенные реализации интерфейса IPrincipal. Кроме того, можно создать собственные пользовательские классы участников на основе IPrincipal.

Текущий поток можно связать с объектом IPrincipal путем назначения объекта свойству потока CurrentPrincipal или Свойство My.User.CurrentPrincipal. Для проверки авторизации можно проверить, является ли пользователь членом конкретной роли. Это можно сделать с помощью метода участника IsInRole.

Приложения ASP.NET обрабатывают объекты IPrincipal иначе, чем другие приложения .NET Framework. ASP.NET создает внешний вид сеанса по протоколу HTTP без получения сведений о состоянии. В рамках данного сеанса объект IPrincipal, представляющий пользователя, доступен в свойстве User объекта HttpContext для всего кода, выполняющего запрос пользователя. Среда CLR автоматически присваивает свойству CurrentPrincipal значение User после возникновения события OnAuthenticate в файле Global.asax. Приложения ASP.NET часто используют свойство User для выполнения проверки авторизации.

ms172765.alert_note(ru-ru,VS.90).gifПримечание.

Если изменить свойство User вручную, свойство CurrentPrincipal будет автоматически обновлено для всех потоков, выполняемых в одном и том же контексте HTTP. Однако изменение свойства CurrentPrincipal не оказывает влияния на свойство User. Оно влияет только на выбранный поток для оставшейся части запроса.

В приложениях ASP.NET Свойство My.User.CurrentPrincipal обновляет свойство User.

Дополнительные сведения о создании собственных типов IPrincipal см. в разделе Пошаговое руководство. Реализация пользовательской проверки подлинности и авторизации.

Предоставление разрешений для работы с объектами IIdentity и IPrincipal

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

.NET Framework обеспечивает такую защиту за счет требования наличия у таких операций разрешений доступа для кода. Предоставьте разрешение SecurityPermissionAttribute.ControlPrincipal приложениям, которым требуется управлять этими объектами, с помощью средства Средство настройки политики управления доступом для кода (Caspol.exe).

По умолчанию все установленные локально приложения имеют это разрешение, так как они выполняются с набором разрешений FullTrust.

Выполнение следующих методов требует разрешения ControlPrincipal:

См. также

Задачи

Пошаговое руководство. Реализация пользовательской проверки подлинности и авторизации

Ссылки

Объект My.User

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

Проверка подлинности и авторизация в .NET Framework с помощью Visual Basic