ClaimsPrincipalPermission Třída

Definice

Představuje oprávnění, které používá implementaci ClaimsAuthorizationManager k určení, zda má být přístup k prostředku udělen aktivnímu objektu zabezpečení. Tato třída se nemůže dědit.

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
Dědičnost
ClaimsPrincipalPermission
Atributy
Implementuje

Příklady

Následující příklad ukazuje, jak chránit prostředek pomocí Demand metody, CheckAccess metody nebo ClaimsPrincipalPermissionAttribute deklarace. V každém případě se vyvolá nakonfigurovaný ClaimsAuthorizationManager objekt zabezpečení, aby se vyhodnotil aktuální objekt zabezpečení proti zadanému prostředku a akci. Pokud aktuální objekt zabezpečení není autorizovaný pro zadanou akci se zadaným prostředkem SecurityException , vyvolá se objekt . V opačném případě bude provádění pokračovat.

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

Následující kód XML ukazuje minimální konfiguraci potřebnou k použití vlastního správce autorizace deklarací identity s ClaimsPrincipalPermission třídou . Musíte alespoň deklarovat oddíly system.identityModel a v elementu <configSection> a system.identityModel.services pak zadat správce autorizace v elementu <claimsAuthorizationManager> v rámci výchozí konfigurace identity. Tím zajistíte, že se na správce autorizace bude odkazovat z výchozí konfigurace federace. Alternativně můžete zadat název konfigurace identity, pod kterou je správce autorizací zadán v atributu identityConfigurationName<federationConfiguration> elementu.

<?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>  

Poznámky

Třída ClaimsPrincipalPermission poskytuje možnost provádět imperativní kontroly přístupu pomocí ClaimsAuthorizationManager , který je nakonfigurován pro aplikaci. Demand Voláním metody nebo statické CheckAccess metody můžete zajistit ochranu prostředků v rámci cesty spuštění kódu podle zásad autorizace definovaných pro správce ověřování deklarací identity. Deklarativní kontroly přístupu lze provádět pomocí ClaimsPrincipalPermissionAttribute třídy .

Důležité

Třída ClaimsPrincipalPermission používá správce autorizace deklarací nakonfigurovaný objektem IdentityConfiguration , který je nastaven v rámci FederatedAuthentication.FederationConfiguration vlastnosti . To platí ve všech případech, a to i ve scénářích, kdy se WS-Federation nepoužívá; například aktivní webové aplikace (WCF) a konzolové aplikace. Správce autorizace deklarací identity můžete zadat buď v konfiguraci, nebo programově. Pokud chcete určit správce autorizace deklarací identity v konfiguračním souboru, nastavte <element claimsAuthorizationManager> v rámci elementu <identityConfiguration> a ujistěte se, že na tuto konfiguraci identity odkazuje <element federationConfiguration> načtený modulem runtime (například nastavením atributu identityConfigurationName ). Pokud chcete správce autorizace deklarací nastavit programově, zadejte obslužnou rutinu FederatedAuthentication.FederationConfigurationCreated události.

Na jedné úrovni se funkce poskytované nástrojem ClaimsPrincipalPermission podobají kontrolám přístupu na základě role (RBAC) poskytovaným prostřednictvím PrincipalPermission třídy, ClaimsAuthorizationManager ale třída provádí kontroly na základě deklarací identity prezentovaných aktivním objektem zabezpečení. To umožňuje mnohem větší úroveň podrobností, než je k dispozici prostřednictvím čistého řízení přístupu na základě role, kde se mnoho oprávnění obvykle shromažďuje v rámci jedné role. Možná ještě důležitější je, že autorizace založená na deklarací umožňuje lepší oddělení obchodní logiky a zásad autorizace, protože je možné požadovat oprávnění pro konkrétní akci s prostředkem v kódu a zásady back-endu se dají použít ke konfiguraci deklarací identity, které musí prezentující entita mít, aby uspokojila poptávku. Podobně jako RBAC ClaimsPrincipalPermission provádí kontrolu přístupu na základě uživatele, to znamená, že na rozdíl od zabezpečení přístupu kódu implementované třídami, které jsou odvozeny z CodeAccessPermission třídy a používají trasu zásobníku k zajištění, že všichni volající kódu dostali oprávnění, ClaimsPrincipalPermission provádí kontrolu pouze na aktuálním objektu zabezpečení.

Statická CheckAccess metoda kontroluje přístup pro zadanou akci u zadaného prostředku. Prostředek i akce jsou řetězce a obvykle se jedná o identifikátory URI. Můžete také inicializovat instanci ClaimsPrincipalPermission pomocí akce a prostředku a volat metodu Demand . Přestože konstruktor přijímá pouze jeden prostředek a akci, ClaimsPrincipalPermission objekty mohou být kombinovány prostřednictvím Union metod a Intersect . Oprávnění vytvořená pomocí těchto metod může obsahovat několik dvojic prostředek-akce.

Obě metody určují přístup vyvoláním ClaimsAuthorizationManager.CheckAccess metody nakonfigurovaného správce autorizace deklarací identity, který se AuthorizationContext skládá z aktivního objektu zabezpečení (Thread.CurrentPrincipal), prostředku a akce. Pokud aktuální objekt zabezpečení nemá oprávnění k provedení akce s prostředkem, v SecurityException opačném případě bude provádění pokračovat.

V případě, že objekt ClaimsPrincipalPermission obsahuje více párů prostředků a akcí, ClaimsAuthorizationManager.CheckAccess je metoda vyvolána pro každý z párů akce prostředku obsažených v oprávnění. Aby bylo volání Demand úspěšné, musí být aktivní objekt zabezpečení autorizovaný pro všechny dvojice prostředků a akcí obsažených v oprávnění.

Konstruktory

ClaimsPrincipalPermission(String, String)

Vytvoří novou instanci třídy ClaimsPrincipalPermission.

Metody

CheckAccess(String, String)

Zkontroluje, jestli je aktuální objekt zabezpečení autorizovaný k provedení zadané akce se zadaným prostředkem.

Copy()

Vrátí kopii aktuální ClaimsPrincipalPermission instance.

Demand()

Zkontroluje, jestli je aktuální objekt zabezpečení autorizovaný pro páry prostředků-akce přidružené k aktuální instanci.

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
FromXml(SecurityElement)

Rekonstruuje aktuální oprávnění a jeho stav ze zadaného kódování XML.

GetHashCode()

Slouží jako výchozí hashovací funkce.

(Zděděno od Object)
GetType()

Type Získá z aktuální instance.

(Zděděno od Object)
Intersect(IPermission)

Vrátí oprávnění, které je průsečíkem aktuálního a zadaného oprávnění.

IsSubsetOf(IPermission)

Vrátí hodnotu, která označuje, zda je aktuální oprávnění podmnožinou zadaného oprávnění.

IsUnrestricted()

Vrátí hodnotu, která označuje, jestli je oprávnění neomezené.

MemberwiseClone()

Vytvoří mělkou kopii aktuálního Objectsouboru .

(Zděděno od Object)
ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)
ToXml()

Vrátí xml kódovanou formu aktuálního oprávnění a jeho stav.

Union(IPermission)

Vrátí nové oprávnění, které je sjednocením aktuálního a zadaného oprávnění. ClaimsPrincipalPermission objekt, který obsahuje všechny dvojice prostředků a akcí, které se nacházejí v aktuální instanci a cílové instanci.

Platí pro

Viz také