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, который содержит все пары ресурс-действие, присутствующие в текущем экземпляре и целевом экземпляре.

Применяется к

См. также раздел