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, který vyhodnotí aktuální objekt zabezpečení proti zadanému prostředku a akci. Pokud aktuální objekt zabezpečení není autorizovaný pro zadanou akci u zadaného prostředku, SecurityException vyvolá se příkaz . 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 system.identityModel.services oddíly v elementu <configSection> a poté zadat správce autorizace v elementu< claimsAuthorizationManager> ve výchozí konfiguraci identity. Tím zajistíte, že se na správce autorizací odkazuje výchozí konfigurace federace. Případně můžete zadat název konfigurace identity, pod kterou je správce autorizací zadaný v atributu identityConfigurationName<prvku 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>  

Poznámky

Třída ClaimsPrincipalPermission poskytuje možnost provádět kontroly imperativního přístupu pomocí ClaimsAuthorizationManager třídy, která je nakonfigurována pro aplikaci. Vyvoláním Demand metody nebo statické CheckAccess metody můžete poskytnout ochranu prostředkům z cesty provádě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 nastaveným FederatedAuthentication.FederationConfiguration ve vlastnosti . To platí ve všech případech, a to i ve scénářích, kde se nepoužívá WS-Federation; Například aktivní webové aplikace (WCF) a konzolové aplikace. Správce autorizace deklarací identity můžete zadat buď v konfiguraci, nebo prostřednictvím kódu programu. Pokud chcete zadat správce autorizace deklarací identity v konfiguračním souboru, nastavte <element claimsAuthorizationManager> pod <element identityConfiguration> a ujistěte se, že na tuto konfiguraci identity odkazuje <element federationConfiguration> , který je 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ší členitost, než je k dispozici prostřednictvím čistého řízení přístupu na základě role, kde se obvykle shromažďuje mnoho oprávnění v rámci jedné role. Možná ještě důležitější je, že autorizace na základě deklarací identity 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 je možné 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 . Ačkoli konstruktor přijímá pouze jeden prostředek a akci, ClaimsPrincipalPermission objekty lze kombinovat prostřednictvím Union metod a Intersect . Oprávnění vytvořená pomocí těchto metod může obsahovat několik dvojic prostředků a akcí.

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. Vyvolá chybu, SecurityException pokud aktuální objekt zabezpečení nemá oprávnění k provedení akce s prostředkem, jinak provádění pokračuje.

V případě ClaimsPrincipalPermission , který obsahuje více párů resource-action, ClaimsAuthorizationManager.CheckAccess je vyvolána metoda pro každý z párů resource-action 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 páry 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 má aktuální objekt zabezpečení oprávnění 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ů a 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()

Získá aktuální Type instanci.

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

Vrátí oprávnění, které je průsečíkem aktuálního oprávnění 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í kódovanou formu XML 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é jsou přítomné v aktuální instanci a cílové instanci.

Platí pro

Viz také