ClaimsPrincipalPermission Klasa

Definicja

Reprezentuje uprawnienie korzystające z ClaimsAuthorizationManager implementacji w celu określenia, czy dostęp do zasobu powinien zostać przyznany aktywnemu podmiotowi zabezpieczeń. Klasa ta nie może być dziedziczona.

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
Dziedziczenie
ClaimsPrincipalPermission
Atrybuty
Implementuje

Przykłady

W poniższym przykładzie pokazano, jak chronić zasób przy użyciu Demand metody, CheckAccess metody lub ClaimsPrincipalPermissionAttribute deklaracji. W każdym przypadku skonfigurowany ClaimsAuthorizationManager jest wywoływany w celu oceny bieżącego podmiotu zabezpieczeń względem określonego zasobu i akcji. Jeśli bieżący podmiot zabezpieczeń nie jest autoryzowany dla określonej akcji w określonym zasobie, SecurityException jest zgłaszany. W przeciwnym razie wykonanie następuje.

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

Poniższy kod XML przedstawia minimalną konfigurację wymaganą do używania niestandardowego menedżera autoryzacji oświadczeń z klasą ClaimsPrincipalPermission . Należy zadeklarować co najmniej sekcje system.identityModel i system.identityModel.services w elemecie <configSection> , a następnie określić menedżera autoryzacji w elemecie <claimsAuthorizationManager> w ramach domyślnej konfiguracji tożsamości. Zapewni to, że menedżer autoryzacji jest przywołyny z domyślnej konfiguracji federacji. Alternatywnie można określić nazwę konfiguracji tożsamości, w ramach której menedżer autoryzacji jest określony w identityConfigurationName atrybucie <elementu 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>  

Uwagi

Klasa ClaimsPrincipalPermission zapewnia możliwość przeprowadzania kontroli dostępu imperatywnego przy użyciu elementu skonfigurowanego ClaimsAuthorizationManager dla aplikacji. Wywołując metodę Demand lub metodę statyczną CheckAccess , można zapewnić ochronę zasobów z poziomu ścieżki wykonywania kodu zgodnie z zasadami autoryzacji zdefiniowanymi dla menedżera uwierzytelniania oświadczeń. Kontrole dostępu deklaratywnego można wykonać przy użyciu ClaimsPrincipalPermissionAttribute klasy .

Ważne

Klasa ClaimsPrincipalPermission używa menedżera autoryzacji oświadczeń skonfigurowanych przez klasę IdentityConfiguration ustawioną w FederatedAuthentication.FederationConfiguration ramach właściwości . Dotyczy to wszystkich przypadków, nawet w scenariuszach, w których nie jest używana WS-Federation; na przykład aktywne aplikacje internetowe (WCF) i aplikacje konsolowe. Menedżer autoryzacji oświadczeń można określić w konfiguracji lub programowo. Aby określić menedżera autoryzacji oświadczeń w pliku konfiguracji, ustaw element <claimsAuthorizationManager> w elemencie <identityConfiguration> i upewnij się, że ta konfiguracja tożsamości jest przywoływany przez <element federationConfiguration> ładowany przez środowisko uruchomieniowe (na przykład przez ustawienie atrybutu identityConfigurationName ). Aby programowo ustawić menedżera autoryzacji oświadczeń, podaj procedurę obsługi dla zdarzenia FederatedAuthentication.FederationConfigurationCreated .

Na jednym poziomie funkcjonalność zapewniana przez ClaimsPrincipalPermission usługę jest podobna do kontroli dostępu opartej na rolach (RBAC) udostępnianej PrincipalPermission za pośrednictwem klasy, jednak ClaimsAuthorizationManager klasa wykonuje kontrole na podstawie oświadczeń przedstawionych przez aktywnego podmiotu zabezpieczeń. Zapewnia to znacznie większy stopień szczegółowości niż jest dostępny za pośrednictwem czystej kontroli dostępu opartej na rolach, gdzie wiele uprawnień jest zwykle zbieranych w ramach jednej roli. Być może, co ważniejsze, autoryzacja oparta na oświadczeniach umożliwia lepsze rozdzielenie zasad logiki biznesowej i autoryzacji, ponieważ uprawnienia mogą być wymagane dla określonego działania na zasobie w kodzie i zasadach zaplecza można użyć do skonfigurowania, które oświadczenia jednostki prezentujące muszą posiadać w celu zaspokojenia zapotrzebowania. Podobnie jak kontrola dostępu oparta na rolach, ClaimsPrincipalPermission wykonuje kontrolę dostępu opartą na użytkowniku, czyli w przeciwieństwie do zabezpieczeń dostępu kodu zaimplementowanych przez klasy pochodzące z CodeAccessPermission klasy i użyje przewodnika stosu, aby upewnić się, że wszystkie obiekty wywołujące kodu otrzymały uprawnienie, ClaimsPrincipalPermission przeprowadza sprawdzanie tylko na bieżącym podmiotu zabezpieczeń.

Metoda statyczna CheckAccess sprawdza dostęp do określonej akcji w określonym zasobie. Zasób i akcja są ciągami i są zwykle identyfikatorami URI. Możesz również zainicjować wystąpienie obiektu ClaimsPrincipalPermission za pomocą akcji i zasobu oraz wywołać metodę Demand . Mimo że konstruktor przyjmuje tylko jeden zasób i akcję, ClaimsPrincipalPermission obiekty można łączyć za pomocą Union metod i Intersect . Uprawnienie utworzone przy użyciu tych metod może zawierać wiele par akcji zasobów.

Obie metody określają dostęp, wywołując ClaimsAuthorizationManager.CheckAccess metodę skonfigurowanego menedżera autoryzacji oświadczeń z składem AuthorizationContext aktywnego podmiotu zabezpieczeń (Thread.CurrentPrincipal), zasobu i akcji. Zgłaszają SecurityException błąd, jeśli bieżący podmiot zabezpieczeń nie ma autoryzacji do wykonania akcji na zasobie; w przeciwnym razie wykonanie następuje.

W przypadku elementu ClaimsPrincipalPermission zawierającego wiele par ClaimsAuthorizationManager.CheckAccess akcji zasobu metoda jest wywoływana dla każdej pary akcji zasobu zawartej w uprawnieniach. Aby wywołanie powiodło Demand się, aktywne podmioty zabezpieczeń muszą być autoryzowane dla wszystkich par akcji zasobów zawartych w uprawnieniach.

Konstruktory

ClaimsPrincipalPermission(String, String)

Tworzy nowe wystąpienie klasy ClaimsPrincipalPermission.

Metody

CheckAccess(String, String)

Sprawdza, czy bieżący podmiot zabezpieczeń ma autoryzację do wykonania określonej akcji dla określonego zasobu.

Copy()

Zwraca kopię bieżącego ClaimsPrincipalPermission wystąpienia.

Demand()

Sprawdza, czy bieżący podmiot zabezpieczeń ma autoryzację dla par zasobów skojarzonych z bieżącym wystąpieniem.

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
FromXml(SecurityElement)

Rekonstruuje bieżące uprawnienie i jego stan z określonego kodowania XML.

GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
Intersect(IPermission)

Zwraca uprawnienie, które jest skrzyżowaniem bieżącego uprawnienia i określonego uprawnienia.

IsSubsetOf(IPermission)

Zwraca wartość wskazującą, czy bieżące uprawnienie jest podzbiorem określonego uprawnienia.

IsUnrestricted()

Zwraca wartość wskazującą, czy uprawnienie jest nieograniczone.

MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)
ToXml()

Zwraca zakodowaną w kodzie XML formę bieżącego uprawnienia i jego stanu.

Union(IPermission)

Zwraca nowe uprawnienie, które jest unią bieżącego uprawnienia i określonego uprawnienia. ClaimsPrincipalPermission obiekt, który zawiera wszystkie pary akcji zasobu, które znajdują się w bieżącym wystąpieniu i wystąpieniu docelowym.

Dotyczy

Zobacz też