ClaimsPrincipalPermission Classe

Definição

Representa uma permissão que utiliza uma ClaimsAuthorizationManager implementação para determinar se o acesso a um recurso deve ser concedido ao principal ativo. Esta classe não pode ser herdada.

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
Herança
ClaimsPrincipalPermission
Atributos
Implementações

Exemplos

O exemplo seguinte mostra como proteger um recurso usando o Demand método, o CheckAccess método ou uma ClaimsPrincipalPermissionAttribute declaração. Em cada caso, a configuração ClaimsAuthorizationManager é invocada para avaliar o principal atual em relação ao recurso e ação especificados. Se o principal atual não estiver autorizado para a ação especificada sobre o recurso especificado, um SecurityException é lançado; caso contrário, a execução prossegue.

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()
        {
        }
    }
}

O XML seguinte mostra a configuração mínima necessária para usar um gestor personalizado de autorização de reclamações com a ClaimsPrincipalPermission classe. Deve, no mínimo, declarar tanto as secções como system.identityModelsystem.identityModel.services as do <configSection> elemento e depois especificar o seu gestor de autorizações num <elemento claimsAuthorizationManager> na configuração de identidade predefinida. Isto garantirá que o seu gestor de autorizações é referenciado a partir da configuração padrão da federação. Em alternativa, pode especificar o nome da configuração de identidade sob a qual o seu gestor de autorização é especificado no identityConfigurationName atributo do <elemento 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>

Observações

A ClaimsPrincipalPermission classe oferece a capacidade de realizar verificações de acesso imperativas utilizando o ClaimsAuthorizationManager que está configurado para uma aplicação. Ao invocar o Demand método ou o método estático CheckAccess , pode fornecer proteção aos recursos a partir do caminho de execução do seu código, de acordo com a política de autorização definida para o gestor de autenticação de sinistros. Verificações declarativas de acesso podem ser realizadas utilizando a ClaimsPrincipalPermissionAttribute classe.

Importante

A ClaimsPrincipalPermission classe utiliza o gestor de autorização de reclamações configurado por , IdentityConfiguration que é definido sob a FederatedAuthentication.FederationConfiguration propriedade. Isto é verdade em todos os casos, mesmo em situações em que WS-Federation não é utilizado; por exemplo, aplicações Web ativas (WCF) e aplicações de consola. Pode especificar o gestor de autorização de sinistros, seja em configuração ou programaticamente. Para especificar o gestor de autorização de reclamações num ficheiro de configuração, defina o <elemento claimsAuthorizationManager> sob um <elemento identityConfiguration> e assegure que esta configuração de identidade é referenciada pelo <elemento federationConfiguration> que é carregado pelo tempo de execução (por exemplo, definindo o identityConfigurationName atributo). Para definir programaticamente o gestor de autorização de sinistros, forneça um gestor para o FederatedAuthentication.FederationConfigurationCreated evento.

Por um lado, a funcionalidade fornecida ClaimsPrincipalPermission por é semelhante às verificações de acesso baseadas em funções (RBAC) fornecidas pela PrincipalPermission classe; no entanto, a ClaimsAuthorizationManager classe realiza verificações com base nas reivindicações apresentadas pelo principal ativo. Isto permite uma granularidade muito maior do que a disponível através do RBAC puro, onde muitas permissões são normalmente recolhidas sob um único papel. Talvez, mais importante, a autorização baseada em reivindicações permita uma melhor separação entre lógica de negócio e política de autorização, porque pode ser exigida permissão para uma ação específica sobre um recurso no código e a política de back-end pode ser usada para configurar quais reivindicações a entidade apresentadora deve possuir para satisfazer a procura. Tal como o RBAC, ClaimsPrincipalPermission realiza uma verificação de acesso baseada no utilizador, isto é, ao contrário da segurança de acesso ao código implementada por classes que derivam da CodeAccessPermission classe e usam um passeio de pilha para garantir que todos os chamadores do código receberam uma permissão, realiza ClaimsPrincipalPermission a verificação apenas no principal atual.

O método estático CheckAccess verifica o acesso para uma ação específica num recurso especificado. O recurso e a ação são ambos strings e normalmente são URIs. Também pode inicializar uma instância de ClaimsPrincipalPermission com uma ação e um recurso e chamar o Demand método. Embora o construtor use apenas um recurso e uma ação, ClaimsPrincipalPermission os objetos podem ser combinados através dos Union métodos e.Intersect Uma permissão criada através destes métodos pode conter múltiplos pares recurso-ação.

Ambos os métodos determinam o acesso invocando o ClaimsAuthorizationManager.CheckAccess método do gestor de autorização de sinistros configurado com um AuthorizationContext composto pelo principal ativo (Thread.CurrentPrincipal), o recurso e a ação. Eles lançam a SecurityException se o principal atual não estiver autorizado a realizar a ação sobre o recurso; caso contrário, a execução prossegue.

No caso de um ClaimsPrincipalPermission que contém múltiplos pares recurso-ação, o ClaimsAuthorizationManager.CheckAccess método é invocado para cada um dos pares recurso-ação contidos na permissão. Para que a chamada Demand tenha sucesso, o principal ativo deve estar autorizado para todos os pares recurso-ação contidos na permissão.

Construtores

Name Description
ClaimsPrincipalPermission(String, String)

Cria uma nova instância da ClaimsPrincipalPermission classe.

Métodos

Name Description
CheckAccess(String, String)

Verifica se o principal atual está autorizado a realizar a ação especificada sobre o recurso especificado.

Copy()

Devolve uma cópia da instância atual ClaimsPrincipalPermission .

Demand()

Verifica se o principal atual está autorizado para os pares recurso-ação associados à instância atual.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
FromXml(SecurityElement)

Reconstrói a permissão atual e o seu estado a partir da codificação XML especificada.

GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
Intersect(IPermission)

Devolve uma permissão que é a interseção entre a permissão atual e a permissão especificada.

IsSubsetOf(IPermission)

Devolve um valor que indica se a permissão atual é um subconjunto da permissão especificada.

IsUnrestricted()

Devolve um valor que indica se a permissão é irrestrita.

MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)
ToXml()

Devolve a forma codificada em XML da permissão atual e o seu estado.

Union(IPermission)

Devolve uma nova permissão que é a união da permissão atual e da permissão especificada. ClaimsPrincipalPermission objeto que contém todos os pares recurso-ação presentes na instância atual e na instância de destino.

Aplica-se a

Ver também