ClaimsAuthorizationManager Sınıf

Tanım

Talep yetkilendirme yöneticisi için temel uygulamayı tanımlar.

public ref class ClaimsAuthorizationManager : System::IdentityModel::Configuration::ICustomIdentityConfiguration
public class ClaimsAuthorizationManager : System.IdentityModel.Configuration.ICustomIdentityConfiguration
type ClaimsAuthorizationManager = class
    interface ICustomIdentityConfiguration
Public Class ClaimsAuthorizationManager
Implements ICustomIdentityConfiguration
Devralma
ClaimsAuthorizationManager
Uygulamalar

Örnekler

Konu başlıklarında ClaimsAuthorizationManager kullanılan kod örnekleri örnekten Claims Based Authorization alınır. Bu örnek, yapılandırmada belirtilen bir ilkeye göre konuları yetkilendirebilen özel talep yetkilendirme yöneticisi sağlar. Özel talep yetkilendirme yöneticisi üç temel bileşenden ClaimsAuthorizationManager oluşur: yöneticisini uygulayan bir sınıf, ResourceAction bir kaynakla eylemi eşleştiren sınıf ve yapılandırma dosyasında belirtilen ilkeyi okuyan ve derleyen bir ilke okuyucu. Bu derlenmiş ilke daha sonra talep yetkilendirme yöneticisi tarafından kaynaklara erişim yetkisi vermek üzere bir sorumluyu değerlendirmek için kullanılabilir. Kısalık için tüm öğeler gösterilmez. Bu örnek ve WIF için kullanılabilen diğer örnekler ve bunların nereden indirileceği hakkında bilgi için bkz. WIF Kod Örneği Dizini.

Aşağıdaki kod, özel talep yetkilendirme yöneticisinin uygulamasını gösterir. yöntemi, LoadCustomConfiguration ilke okuyucu yardımcı sınıfını (gösterilmez) kullanarak ilkeyi yapılandırmadan okur ve derler ve CheckAccess yöntem bu ilkeye göre erişim verir veya erişimi reddeder.

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Linq.Expressions;
using System.Security.Claims;
using System.Xml;

namespace ClaimsAuthorizationLibrary
{
    /// <summary>
    /// Simple ClaimsAuthorizationManager implementation that reads policy information from the .config file
    /// </summary>
    public class MyClaimsAuthorizationManager : ClaimsAuthorizationManager
    {
        static Dictionary<ResourceAction, Func<ClaimsPrincipal, bool>> _policies = new Dictionary<ResourceAction, Func<ClaimsPrincipal, bool>>();
        PolicyReader _policyReader = new PolicyReader();

        /// <summary>
        /// Creates a new instance of the MyClaimsAuthorizationManager
        /// </summary>        
        public MyClaimsAuthorizationManager()
        {
        }

        /// <summary>
        /// Overloads  the base class method to load the custom policies from the config file
        /// </summary>
        /// <param name="nodelist">XmlNodeList containing the policy information read from the config file</param>
        public override void LoadCustomConfiguration(XmlNodeList nodelist)
        {
            Expression<Func<ClaimsPrincipal, bool>> policyExpression;

            foreach (XmlNode node in nodelist)
            {
                //
                // Initialize the policy cache
                //
                XmlDictionaryReader rdr = XmlDictionaryReader.CreateDictionaryReader(new XmlTextReader(new StringReader(node.OuterXml)));
                rdr.MoveToContent();

                string resource = rdr.GetAttribute("resource");
                string action = rdr.GetAttribute("action");

                policyExpression = _policyReader.ReadPolicy(rdr);

                //
                // Compile the policy expression into a function
                //
                Func<ClaimsPrincipal, bool> policy = policyExpression.Compile();

                //
                // Insert the policy function into the policy cache
                //
                _policies[new ResourceAction(resource, action)] = policy;
            }
        }

        /// <summary>
        /// Checks if the principal specified in the authorization context is authorized to perform action specified in the authorization context 
        /// on the specified resoure
        /// </summary>
        /// <param name="pec">Authorization context</param>
        /// <returns>true if authorized, false otherwise</returns>
        public override bool CheckAccess(AuthorizationContext pec)
        {
            //
            // Evaluate the policy against the claims of the 
            // principal to determine access
            //
            bool access = false;
            try
            {
                ResourceAction ra = new ResourceAction(pec.Resource.First<Claim>().Value, pec.Action.First<Claim>().Value);

                access = _policies[ra](pec.Principal);
            }
            catch (Exception)
            {
                access = false;
            }

            return access;
        }
    }
}

Aşağıdaki kod, özel talep yöneticisi tarafından kullanılan sınıfı gösterir ResourceAction .

using System;

namespace ClaimsAuthorizationLibrary
{
    /// <summary>
    /// Class to encapsulate resource/action pair
    /// </summary>
    public class ResourceAction
    {
        public string Resource;
        public string Action;

        /// <summary>
        /// Checks if the current instance is equal to the given object by comparing the resource and action values
        /// </summary>
        /// <param name="obj">object to compare to</param>
        /// <returns>True if equal, else false.</returns>
        public override bool Equals(object obj)
        {
            ResourceAction ra = obj as ResourceAction;
            if (ra != null)
            {
                return ((string.Compare(ra.Resource, Resource, true) == 0) && (string.Compare(ra.Action, Action, true) == 0));
            }

            return base.Equals(obj);
        }

        /// <summary>
        /// Gets the hash code.
        /// </summary>
        /// <returns>The hash code.</returns>
        public override int GetHashCode()
        {
            return (Resource + Action).ToLower().GetHashCode();
        }

        /// <summary>
        /// Creates an instance of ResourceAction class.
        /// </summary>
        /// <param name="resource">The resource name.</param>
        /// <param name="action">The action.</param>
        /// <exception cref="ArgumentNullException">when <paramref name="resource"/> is null</exception>
        public ResourceAction(string resource, string action)
        {
            if (string.IsNullOrEmpty(resource))
            {
                throw new ArgumentNullException("resource");
            }

            Resource = resource;
            Action = action;
        }
    }
}

Aşağıdaki XML, IIS 7.5'te barındırılan bir web uygulaması için yukarıda gösterilen talep yetkilendirme yöneticisinin nasıl yapılandırileceğini gösterir. Yalnızca talep yetkilendirme yöneticisinin yapılandırmasına özgü öğeler gösterilir. öğesinin altındaki <system.Webserver> işlem hattına ClaimsAuthorizationModule sınıfına bir başvuru eklenmesi gerektiğini unutmayın. IIS'nin IIS 7 öncesi sürümlerinde barındırılan siteler ve uygulamalar için modüller öğesinin altındaki işlem hattına <system.Web> eklenebilir. Bu yapılandırma gösterilir ancak açıklama satırı yapılır.

Talep yetkilendirme yöneticisi tarafından kullanılan ilke, claimsAuthorizationManager> öğesi altındaki< özel <policy> öğeler tarafından belirtilir. İlk ilkede, belirtilen kaynakta belirtilen eylemi gerçekleştirmek için sorumlunun belirtilen taleplerden birine sahip olması gerekir. İkinci ilkede, sorumlunun belirtilen kaynakta belirtilen eylemi gerçekleştirebilmesi için her iki beyana da sahip olması gerekir. Diğer tüm durumlarda, sahip olduğu taleplerden bağımsız olarak sorumluya otomatik olarak erişim verilir.

<configuration>
  <configSections>
    <!--WIF 4.5 sections -->
    <section name="system.identityModel" type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    ...

  </configSections>

  ...

  <system.web>
    <httpModules>
      <!--WIF 4.5 modules -->
      <!--Not needed here for IIS >= 7 -->
      <!--<add name="ClaimsAuthorizationModule" type="System.IdentityModel.Services.ClaimsAuthorizationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>-->
    </httpModules>
  </system.web>

  ...

  <system.webServer>
    <modules>
      <!--WIF 4.5 modules -->
      <add name="ClaimsAuthorizationModule" type="System.IdentityModel.Services.ClaimsAuthorizationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
    </modules>
  </system.webServer>

  ...

  <!-- WIF 4.5 s.im section-->
  <system.identityModel>
    <identityConfiguration>
      <claimsAuthorizationManager type="ClaimsAuthorizationLibrary.MyClaimsAuthorizationManager, ClaimsAuthorizationLibrary">
        <policy resource="http://localhost:28491/Developers.aspx" action="GET">
          <or>
            <claim claimType="http://schemas.microsoft.com/ws/2008/06/identity/claims/role" claimValue="developer" />
            <claim claimType="http://schemas.xmlsoap.org/claims/Group" claimValue="Administrator" />
          </or>
        </policy>
        <policy resource="http://localhost:28491/Administrators.aspx" action="GET">
          <and>
            <claim claimType="http://schemas.xmlsoap.org/claims/Group" claimValue="Administrator" />
            <claim claimType="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/country" claimValue="USA" />
          </and>
        </policy>
        <policy resource="http://localhost:28491/Default.aspx" action="GET">
        </policy>
        <policy resource="http://localhost:28491/" action="GET">
        </policy>
        <policy resource="http://localhost:28491/Claims.aspx" action="GET">
        </policy>
      </claimsAuthorizationManager>

      ...

    </identityConfiguration>
  </system.identityModel>
  ...

</configuration><configuration>
  <configSections>
    <!--WIF 4.5 sections -->
    <section name="system.identityModel" type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    ...

  </configSections>

  ...

  <system.web>
    <httpModules>
      <!--WIF 4.5 modules -->
      <!--Not needed here for IIS >= 7 -->
      <!--<add name="ClaimsAuthorizationModule" type="System.IdentityModel.Services.ClaimsAuthorizationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>-->
    </httpModules>
  </system.web>

  ...

  <system.webServer>
    <modules>
      <!--WIF 4.5 modules -->
      <add name="ClaimsAuthorizationModule" type="System.IdentityModel.Services.ClaimsAuthorizationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
    </modules>
  </system.webServer>

  ...

  <!-- WIF 4.5 s.im section-->
  <system.identityModel>
    <identityConfiguration>
      <claimsAuthorizationManager type="MyClaimsAuthorizationManager.SimpleClaimsAuthorizationManager, MyClaimsAuthorizationManager" />
      ...

  </system.identityModel>
  ...

</configuration>

Açıklamalar

sınıfı, ClaimsAuthorizationManager talep yetkilendirme yöneticisi için temel uygulama sağlar. Talep yetkilendirme yöneticisi aşağıdaki iki senaryoda kullanılabilir:

  • Web tabanlı uygulama ve hizmetlerde, istenen kaynağı gerçekten uygulayan uygulama kodu çağrılmadan önce gelen taleplerin değerine göre bir kaynağa erişim yetkisi verebileceğiniz bir genişletilebilirlik noktası sağlamak için işleme işlem hattına bir talep yetkilendirme yöneticisi eklenebilir.

  • Sınıfını veya sınıfını ClaimsPrincipalPermissionClaimsPrincipalPermissionAttribute kullanarak kodunuzda kesinlik temelli veya bildirim temelli talep tabanlı erişim denetimleri gerçekleştirdiğinizde, uygulamanız için yapılandırılan talep yetkilendirme yöneticisi sistem tarafından denetimi gerçekleştirmek üzere çağrılır. Talep tabanlı erişim denetimleri hem web tabanlı uygulamalarda hem de masaüstü uygulamalarında gerçekleştirilebilir.

Sınıfı tarafından ClaimsAuthorizationManager sağlanan varsayılan uygulama, sunulan her talep için erişim yetkisi verir; ancak bu sınıftan türetebilir ve kendi yetkilendirme mantığınızı sağlamak için yöntemini geçersiz kılabilirsiniz CheckAccess .

Talep yetkilendirme yöneticisi kullanımı isteğe bağlıdır. Uygulamanızı, sınıfını kullanarak IdentityConfiguration program aracılığıyla veya bildirim temelli olarak, uygulama yapılandırma dosyanızdaki identityConfiguration> öğesinin alt öğesi olan claimsAuthorizationManager öğesini< belirterek bir talep yetkilendirme yöneticisi kullanacak şekilde yapılandırabilirsiniz.>< Uygulamanız Internet Information Services'te (IIS) barındırılan bir web sitesi veya web uygulamasıysa, ASP.NET HTTP Modülleri koleksiyonuna da öğesini eklemeniz ClaimsAuthorizationModule gerekir.

Önemli

sınıfını ClaimsPrincipalPermission veya ClaimsPrincipalPermissionAttribute sınıfını kullandığınızda, erişim denetimini gerçekleştirmek için kullanılan talep yetkilendirme yöneticisi, özelliği altındaki FederatedAuthentication.FederationConfiguration kimlik yapılandırmasında belirtilen yöneticidir. Yapılandırma dosyasında, <identityConfiguration> varsayılan <federationConfiguration> öğeden başvurulan bölümdür. Bu, Windows Communication Foundation (WCF) hizmetleri ve masaüstü uygulamaları için bile geçerlidir.

ClaimsAuthorizationManager Temel sınıf herhangi bir ek yapılandırma almaz; ancak, alt öğelerinden <claimsAuthorizationElement>talep yetkilendirme yöneticinizin başlatılmasını sağlamak için türetilmiş sınıflarda öğesini geçersiz kılabilirsinizLoadCustomConfiguration. Tipik senaryo, hangi kaynağa erişim elde etmek için hangi talep türlerinin ve değerlerin gerekli olduğunu belirleyen yetkilendirme ilkelerini belirtmek için bu alt öğeleri kullanmaktır. Bu zor bir gereksinim değildir, ancak uygulamanız için anlamlı olan kullanımı ve söz dizimini tanımlayabilirsiniz.

Oluşturucular

ClaimsAuthorizationManager()

ClaimsAuthorizationManager sınıfının yeni bir örneğini başlatır.

Yöntemler

CheckAccess(AuthorizationContext)

Türetilmiş bir sınıfta uygulandığında, belirtilen kaynakta belirtilen eylemi gerçekleştirmek için belirtilen bağlamdaki konu için yetkilendirmeyi denetler.

Equals(Object)

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

(Devralındığı yer: Object)
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)
LoadCustomConfiguration(XmlNodeList)

Türetilmiş bir sınıfta geçersiz kılındığında XML'den özel yapılandırma yükler.

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)

Şunlara uygulanır