ClaimsPrincipalPermission Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Представляет разрешение, которое использует ClaimsAuthorizationManager реализацию для определения необходимости предоставления доступа к ресурсу активному субъекту. Этот класс не может быть унаследован.
public ref class ClaimsPrincipalPermission sealed : System::Security::IPermission, System::Security::Permissions::IUnrestrictedPermission
[System.Serializable]
public sealed class ClaimsPrincipalPermission : System.Security.IPermission, System.Security.Permissions.IUnrestrictedPermission
[<System.Serializable>]
type ClaimsPrincipalPermission = class
interface IPermission
interface ISecurityEncodable
interface IUnrestrictedPermission
Public NotInheritable Class ClaimsPrincipalPermission
Implements IPermission, IUnrestrictedPermission
- Наследование
-
ClaimsPrincipalPermission
- Атрибуты
- Реализации
Примеры
В следующем примере показано, как защитить ресурс с помощью Demand метода, CheckAccess метода или ClaimsPrincipalPermissionAttribute объявления. В каждом случае настроенный объект ClaimsAuthorizationManager вызывается для оценки текущего субъекта по указанному ресурсу и действию. Если текущий субъект не авторизован для указанного действия указанного ресурса, SecurityException создается исключение; в противном случае выполняется выполнение.
using System;
using System.IdentityModel.Services;
using System.Security.Claims;
using System.Security.Permissions;
using System.Threading;
namespace ClaimsBasedAuthorization
{
/// <summary>
/// Program illustrates using Claims-based authorization
/// </summary>
class Program
{
static void Main(string[] args)
{
//
// Method 1. Simple access check using static method.
// Expect this to be most common method.
//
ClaimsPrincipalPermission.CheckAccess("resource", "action");
//
// Method 2. Programmatic check using the permission class
// Follows model found at http://msdn.microsoft.com/library/system.security.permissions.principalpermission.aspx
//
ClaimsPrincipalPermission cpp = new ClaimsPrincipalPermission("resource", "action");
cpp.Demand();
//
// Method 3. Access check interacting directly with the authorization manager.
//
ClaimsAuthorizationManager am = new ClaimsAuthorizationManager();
am.CheckAccess(new AuthorizationContext((ClaimsPrincipal)Thread.CurrentPrincipal, "resource", "action"));
//
// Method 4. Call a method that is protected using the permission attribute class
//
ProtectedMethod();
Console.WriteLine("Press [Enter] to continue.");
Console.ReadLine();
}
//
// Declarative access check using the permission class. The caller must satisfy both demands.
//
[ClaimsPrincipalPermission(SecurityAction.Demand, Resource = "resource", Operation = "action")]
[ClaimsPrincipalPermission(SecurityAction.Demand, Resource = "resource1", Operation = "action1")]
static void ProtectedMethod()
{
}
}
}
Следующий XML-код показывает минимальную конфигурацию, необходимую для использования пользовательского диспетчера авторизации утверждений с классом ClaimsPrincipalPermission . Необходимо объявить system.identityModelsystem.identityModel.services как минимум разделы элемента <configSection> , а затем указать диспетчер авторизации в <элементе claimsAuthorizationManager> в конфигурации удостоверения по умолчанию. Это гарантирует, что диспетчер авторизации ссылается на конфигурацию федерации по умолчанию. Кроме того, можно указать имя конфигурации удостоверения, в которой диспетчер авторизации указан в identityConfigurationName атрибуте <элемента federationConfiguration> .
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<!-- WIF configuration sections -->
<section name="system.identityModel" type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<section name="system.identityModel.services" type="System.IdentityModel.Services.Configuration.SystemIdentityModelServicesSection, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<system.identityModel>
<identityConfiguration>
<claimsAuthorizationManager type ="MyClaimsAuthorizationManager.MyClaimsAuthorizationManager, MyClaimsAuthorizationManager"/>
</identityConfiguration>
</system.identityModel>
</configuration>
Комментарии
Класс ClaimsPrincipalPermission предоставляет возможность выполнять проверки императивного доступа с помощью ClaimsAuthorizationManager настраиваемого приложения. Вызывая Demand метод или статический CheckAccess метод, вы можете обеспечить защиту ресурсов из пути выполнения кода в соответствии с политикой авторизации, определенной для диспетчера проверки подлинности утверждений. Декларативные проверки доступа можно выполнять с помощью ClaimsPrincipalPermissionAttribute класса.
Это важно
Класс ClaimsPrincipalPermission использует диспетчер авторизации утверждений, настроенный IdentityConfiguration заданным в свойстве FederatedAuthentication.FederationConfiguration . Это верно во всех случаях, даже в сценариях, когда WS-Federation не используется; Например, активные веб-приложения WCF и консольные приложения. Диспетчер авторизации утверждений можно указать в конфигурации или программно. Чтобы указать диспетчер авторизации утверждений в файле конфигурации, задайте <элемент claimsAuthorizationManager> в <элементе identityConfiguration и убедитесь, что эта конфигурация удостоверения ссылается на элемент federationConfiguration>>, загруженный средой выполнения (например, задав атрибут).<identityConfigurationName Чтобы задать диспетчер авторизации утверждений программным способом, предоставьте обработчик события FederatedAuthentication.FederationConfigurationCreated .
На одном уровне функциональные возможности, предоставляемые с помощью проверки доступа на основе ролей (RBAC), предоставляемые ClaimsPrincipalPermission через PrincipalPermission класс, ClaimsAuthorizationManager однако класс выполняет проверки на основе утверждений, представленных активным субъектом. Это обеспечивает гораздо большую степень детализации, чем доступно через чистый RBAC, где многие разрешения обычно собираются под одной ролью. Возможно, более важно, что авторизация на основе утверждений обеспечивает лучшее разделение бизнес-логики и политики авторизации, так как разрешение может потребоваться для конкретного действия по ресурсу в коде и внутренней политике можно использовать для настройки утверждений, которые выступающие сущности должны обладать для удовлетворения спроса. Как и RBAC, ClaimsPrincipalPermission выполняет проверку доступа на основе пользователя, т. е. в отличие от безопасности доступа к коду, реализованной классами, производными от CodeAccessPermission класса и использующую пошаговое руководство по стеку, чтобы убедиться, что все вызывающие элементы кода были предоставлены разрешение, ClaimsPrincipalPermission выполняет проверку только на текущем субъекте.
Статический CheckAccess метод проверяет доступ к указанному действию в указанном ресурсе. Ресурс и действие являются строками и обычно являются URI. Можно также инициализировать экземпляр ClaimsPrincipalPermission действия и ресурса и вызвать Demand метод. Хотя конструктор принимает только один ресурс и действие, ClaimsPrincipalPermission объекты можно объединить с помощью Union методов и Intersect методов. Разрешение, созданное с помощью этих методов, может содержать несколько пар действий ресурсов.
Оба метода определяют доступ путем вызова ClaimsAuthorizationManager.CheckAccess метода настроенного диспетчера авторизации утверждений с AuthorizationContext активным субъектом (Thread.CurrentPrincipal), ресурсом и действием. Они вызывают исключение, если текущий SecurityException субъект не авторизован для выполнения действия в ресурсе; в противном случае выполнение продолжается.
В случае ClaimsPrincipalPermission с несколькими парами действия ресурсов метод вызывается для каждой пары действий с ресурсом, ClaimsAuthorizationManager.CheckAccess содержащейся в разрешении. Для успешного выполнения вызова Demand активный субъект должен быть авторизован для всех пар действий ресурсов, содержащихся в разрешении.
Конструкторы
| Имя | Описание |
|---|---|
| ClaimsPrincipalPermission(String, String) |
Создает новый экземпляр класса ClaimsPrincipalPermission. |
Методы
| Имя | Описание |
|---|---|
| CheckAccess(String, String) |
Проверяет, авторизован ли текущий субъект на выполнение указанного действия в указанном ресурсе. |
| Copy() |
Возвращает копию текущего ClaimsPrincipalPermission экземпляра. |
| Demand() |
Проверяет, авторизован ли текущий субъект для пар действий ресурсов, связанных с текущим экземпляром. |
| Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
| FromXml(SecurityElement) |
Восстанавливает текущее разрешение и его состояние из указанной кодировки XML. |
| GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| Intersect(IPermission) |
Возвращает разрешение, которое является пересечением текущего разрешения и указанного разрешения. |
| IsSubsetOf(IPermission) |
Возвращает значение, указывающее, является ли текущее разрешение подмножеством указанного разрешения. |
| IsUnrestricted() |
Возвращает значение, указывающее, является ли разрешение неограниченным. |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
| ToXml() |
Возвращает xml-кодированную форму текущего разрешения и его состояния. |
| Union(IPermission) |
Возвращает новое разрешение, которое является объединением текущего разрешения и указанного разрешения. ClaimsPrincipalPermission объект, имеющий все пары действия ресурсов, которые присутствуют в текущем экземпляре и целевом экземпляре. |