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.identityModel
и в <configSection>
элементе system.identityModel.services
, а затем указать диспетчер авторизации в <элементе 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 события .
С одной стороны, функции, предоставляемые с помощью ClaimsPrincipalPermission , аналогичны проверкам доступа на основе ролей (RBAC), предоставляемым через 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, который содержит все пары ресурс-действие, присутствующие в текущем экземпляре и целевом экземпляре. |