ClaimsPrincipalPermission Sınıf

Tanım

Etkin sorumluya bir kaynağa erişim verilmesi gerekip gerekmediğini belirlemek için bir uygulama kullanan ClaimsAuthorizationManager bir izni temsil eder. Bu sınıf devralınamaz.

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
Devralma
ClaimsPrincipalPermission
Öznitelikler
Uygulamalar

Örnekler

Aşağıdaki örnekte yöntemini, yöntemini veya ClaimsPrincipalPermissionAttribute bildirimini Demand kullanarak bir kaynağın nasıl korunacakları CheckAccess gösterilmektedir. Her durumda, geçerli sorumluyu belirtilen kaynak ve eyleme göre değerlendirmek için yapılandırılan ClaimsAuthorizationManager çağrılır. Geçerli sorumlu belirtilen kaynakta belirtilen eylem için yetkilendirilmediyse, bir SecurityException oluşturulur; aksi takdirde yürütme devam eder.

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

Aşağıdaki XML, sınıfıyla özel talep yetkilendirme yöneticisi kullanmak için gereken en düşük yapılandırmayı ClaimsPrincipalPermission gösterir. En azından öğesindeki system.identityModel hem ve system.identityModel.services bölümlerini <configSection> bildirmeniz hem de yetkilendirme yöneticinizi varsayılan kimlik yapılandırması altındaki claimsAuthorizationManager<> öğesinde belirtmeniz gerekir. Bu, yetkilendirme yöneticinize varsayılan federasyon yapılandırmasından başvurulmasını sağlar. Alternatif olarak, federasyonConfiguration> öğesinin özniteliğinde yetkilendirme yöneticinizin belirtildiği kimlik yapılandırmasının< adını belirtebilirsiniz.identityConfigurationName

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

Açıklamalar

sınıfı, ClaimsPrincipalPermission bir uygulama için yapılandırılan öğesini kullanarak ClaimsAuthorizationManager kesinlik temelli erişim denetimleri gerçekleştirme yeteneği sağlar. yöntemini veya statik CheckAccess yöntemi çağırarakDemand, talep kimlik doğrulama yöneticiniz için tanımlanan yetkilendirme ilkesine göre kodunuzun yürütme yolundan kaynaklara koruma sağlayabilirsiniz. Bildirim temelli erişim denetimleri sınıfı kullanılarak ClaimsPrincipalPermissionAttribute gerçekleştirilebilir.

Önemli

sınıfı, ClaimsPrincipalPermission özelliği altında ayarlanan tarafından IdentityConfiguration yapılandırılan talep yetkilendirme yöneticisini FederatedAuthentication.FederationConfiguration kullanır. Bu, WS-Federation kullanılmadığı senaryolarda bile her durumda geçerlidir; örneğin, etkin (WCF) Web uygulamaları ve Konsol uygulamaları. Talep yetkilendirme yöneticisini yapılandırmada veya program aracılığıyla belirtebilirsiniz. Bir yapılandırma dosyasında talep yetkilendirme yöneticisini belirtmek için, identityConfiguration> öğesi altında<claimsAuthorizationManager> öğesini ayarlayın< ve bu kimlik yapılandırmasına çalışma zamanı tarafından yüklenen federationConfiguration> öğesi tarafından< başvuruldığından emin olun (örneğin, özniteliğini ayarlayarakidentityConfigurationName). Talep yetkilendirme yöneticisini program aracılığıyla ayarlamak için olay için FederatedAuthentication.FederationConfigurationCreated bir işleyici sağlayın.

Tarafından sağlanan ClaimsPrincipalPermission işlevsellik bir düzeyde, sınıfı aracılığıyla PrincipalPermission sağlanan rol tabanlı erişim denetimlerine (RBAC) benzer; ancak sınıf, ClaimsAuthorizationManager etkin sorumlu tarafından sunulan taleplere göre denetimler gerçekleştirir. Bu, genellikle tek bir rol altında birçok iznin toplandığı saf RBAC aracılığıyla sağlanandan çok daha fazla ayrıntı düzeyi sağlar. Daha da önemlisi, talep tabanlı yetkilendirme iş mantığı ve yetkilendirme ilkesinin daha iyi ayrılmasını sağlar çünkü koddaki bir kaynakta belirli bir eylem için izin talep edilebilir ve arka uç ilkesi, talebi karşılamak için sunum yapan varlığın sahip olması gereken talepleri yapılandırmak için kullanılabilir. RBAC gibi, ClaimsPrincipalPermission sınıfından türetilen sınıflar tarafından uygulanan kod erişim güvenliğinin aksine kullanıcı tabanlı bir erişim denetimi gerçekleştirir ve kodun tüm çağıranlarına izin verildiğinden CodeAccessPermission emin olmak için bir yığın kılavuzu kullanır, ClaimsPrincipalPermission denetimini yalnızca geçerli sorumlu üzerinde gerçekleştirir.

Statik CheckAccess yöntem, belirtilen bir kaynakta belirtilen eyleme erişimi denetler. Kaynak ve eylem hem dizedir hem de genellikle URI'lerdir. Örneğini ClaimsPrincipalPermission bir eylem ve kaynakla da başlatabilir ve yöntemini çağırabilirsiniz Demand . Oluşturucu yalnızca tek bir kaynak ve eylem alsa da, ClaimsPrincipalPermission nesneler ve Intersect yöntemleri aracılığıyla Union birleştirilebilir. Bu yöntemler kullanılarak oluşturulan bir izin birden çok kaynak eylem çifti içerebilir.

Her iki yöntem de etkin sorumludan (Thread.CurrentPrincipal ), kaynak ve eylemden oluşan yapılandırılmış AuthorizationContext talep yetkilendirme yöneticisinin yöntemini çağırarak ClaimsAuthorizationManager.CheckAccess erişimi belirler. Geçerli sorumlunun kaynak üzerinde eylemi gerçekleştirme yetkisi yoksa bir SecurityException oluştururlar; aksi takdirde yürütme devam eder.

Birden çok kaynak eylem çifti içeren bir ClaimsPrincipalPermission durumunda, ClaimsAuthorizationManager.CheckAccess izinde yer alan kaynak eylem çiftlerinin her biri için yöntemi çağrılır. Çağrısının başarılı olması için Demand etkin sorumlunun izinde yer alan tüm kaynak eylem çiftleri için yetkilendirilmiş olması gerekir.

Oluşturucular

ClaimsPrincipalPermission(String, String)

ClaimsPrincipalPermission sınıfının yeni bir örneğini oluşturur.

Yöntemler

CheckAccess(String, String)

Geçerli sorumlunun belirtilen kaynakta belirtilen eylemi gerçekleştirme yetkisine sahip olup olmadığını denetler.

Copy()

Geçerli ClaimsPrincipalPermission örneğin bir kopyasını döndürür.

Demand()

Geçerli sorumlunun geçerli örnekle ilişkili kaynak eylemi çiftleri için yetkilendirilip yetkilendirilmediğini denetler.

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
FromXml(SecurityElement)

Geçerli izni ve durumunu belirtilen XML kodlamasından yeniden oluşturur.

GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetType()

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
Intersect(IPermission)

Geçerli iznin ve belirtilen iznin kesişimi olan bir izin döndürür.

IsSubsetOf(IPermission)

Geçerli iznin belirtilen iznin bir alt kümesi olup olmadığını gösteren bir değer döndürür.

IsUnrestricted()

İznin kısıtlanmamış olup olmadığını belirten bir değer döndürür.

MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
ToString()

Geçerli nesneyi temsil eden dizeyi döndürür.

(Devralındığı yer: Object)
ToXml()

Geçerli iznin XML kodlanmış biçimini ve durumunu döndürür.

Union(IPermission)

Geçerli iznin ve belirtilen iznin birleşimi olan yeni bir izin döndürür. ClaimsPrincipalPermission nesnesi, geçerli örnekte ve hedef örnekte bulunan tüm kaynak eylem çiftlerini içerir.

Şunlara uygulanır

Ayrıca bkz.