ClaimsAuthorizationManager ClaimsAuthorizationManager ClaimsAuthorizationManager ClaimsAuthorizationManager Class

정의

클레임 권한 부여 관리자에 대한 기본 구현을 정의합니다.Defines the base implementation for a claims authorization manager.

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
상속
ClaimsAuthorizationManagerClaimsAuthorizationManagerClaimsAuthorizationManagerClaimsAuthorizationManager
구현

예제

에 사용 되는 코드 예제는 ClaimsAuthorizationManager 항목에서 수행 되는 Claims Based Authorization 샘플.The code examples that are used in the ClaimsAuthorizationManager topics are taken from the Claims Based Authorization sample. 이 샘플 구성에 지정 된 정책에 따라 주체 권한을 부여할 수 있는 사용자 지정 클레임 권한 부여 관리자를 제공 합니다.This sample provides a custom claims authorization manager that can authorize subjects based on a policy that is specified in configuration. 사용자 지정 클레임 권한 부여 관리자를 사용 하는 세 가지 기본 구성 요소로 이루어져:에서 파생 된 클래스 ClaimsAuthorizationManager 관리자를 구현 하는 ResourceAction 리소스 및 작업을 하는 클래스 및 정책 판독기를 읽고 컴파일하는 정책을 구성 파일에 지정 합니다.The custom claims authorization manager consists of three basic components: a class derived from ClaimsAuthorizationManager that implements the manager, the ResourceAction class that pairs a resource and an action, and a policy reader that reads and compiles policy that is specified in the configuration file. 이 정책 수를 컴파일된 다음 리소스에 대 한 액세스 권한을 부여 하기 위해 보안 주체를 평가 하기 위해 클레임 인증 관리자에서 사용할 수 있습니다.This compiled policy can then be used by the claims authorization manager to evaluate a principal in order to authorize access to resources. 일부 요소는 간단히 하기 위해 표시 됩니다.Not all elements are shown for the sake of brevity. 이 샘플 및 사용할 수 있는 다른 샘플에 대 한 WIF에 대 한 다운로드 위치에 대 한, 참조 WIF 코드 샘플 인덱스합니다.For information about this sample and other samples available for WIF and about where to download them, see WIF Code Sample Index.

다음 코드에는 사용자 지정 클레임 권한 부여 관리자의 구현을 보여 줍니다.The following code shows the implementation of the custom claims authorization manager. LoadCustomConfiguration 메서드를 읽고 구성에서 정책 (표시 되지 않음) 정책 판독기 도우미 클래스를 사용 하 여 컴파일 및 CheckAccess 메서드를 허용 하거나이 정책에 따라 액세스를 거부 합니다.The LoadCustomConfiguration method reads and compiles the policy from configuration by using the policy reader helper class (not shown) and the CheckAccess method grants or denies access based on this policy.

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;
        }
    }
}

다음 코드에서는 ResourceAction 사용자 지정 클레임 관리자 사용 되는 클래스입니다.The following code shows the ResourceAction class used by the custom claims manager.


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;
        }
    }
}

다음 XML는 IIS 7.5에서 호스팅되는 웹 애플리케이션에 대 한 위의 권한 부여 관리자 클레임을 구성 하는 방법을 보여 줍니다.The following XML shows how to configure the claims authorization manager shown above for a web application hosted in IIS 7.5. 클레임 인증 관리자의 구성에 특정 요소만 표시 됩니다.Only the elements specific to the configuration of the claims authorization manager are shown. 에 대 한 참조를 ClaimsAuthorizationModule 아래에서 파이프라인에 클래스를 추가 해야 합니다는 <system.Webserver> 요소입니다.Note that a reference to the ClaimsAuthorizationModule class must be added to the pipeline under the <system.Webserver> element. 사이트 및 IIS 7 이전의 IIS 버전에서 호스팅되는 애플리케이션에 대 한 모듈에서 파이프라인에 추가할 있습니다를 <system.Web> 요소입니다.For sites and applications hosted in versions of IIS prior to IIS 7 the modules can be added to the pipeline under the <system.Web> element. 이 구성은 표시 하지만 주석으로 처리 합니다.This configuration is shown but commented out.

클레임 권한 부여 관리자에서 사용 된 정책 사용자 지정 된 <policy> 아래에 요소를 <claimsAuthorizationManager> 요소입니다.The policy used by the claims authorization manager is specified by custom <policy> elements under the <claimsAuthorizationManager> element. 첫 번째 정책에서 하나 지정된 된 리소스에서 지정 된 작업을 수행 하기 위해 지정된 된 클레임 보안 주체가 있어야 합니다.In the first policy, the principal must possess one of the specified claims in order to perform the specified action on the specified resource. 두 번째 정책에서 보안 주체 모두 클레임을 지정된 된 리소스에서 지정 된 작업을 수행할 수 있어야 합니다.In the second policy, the principal must possess both claims to be able to perform the specified action on the specified resource. 나머지 모든 보안 주체가 소유 하는 클레임에 관계 없이 액세스를 자동으로 부여 됩니다.In all others, the principal is automatically granted access regardless of the claims it possesses.

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

설명

ClaimsAuthorizationManager 클래스는 클레임 권한 부여 관리자에 대 한 기본 구현을 제공 합니다.The ClaimsAuthorizationManager class provides the base implementation for a claims authorization manager. 클레임 권한 부여 관리자는 다음 두 가지 시나리오에서 사용할 수 있습니다.A claims authorization manager can be used in the following two scenarios:

  • 웹 기반 애플리케이션 및 서비스에서 클레임 권한 부여 관리자는 애플리케이션 코드 보다 먼저 들어오는 클레임 값에 따라 리소스에 대 한 액세스를 권한을 부여할 수는 확장성 지점을 제공 하기 위해 처리 파이프라인에 추가할 수 있습니다. 실제로 구현 요청된 된 리소스 라고 합니다.In web-based applications and services, a claims authorization manager can be added to the processing pipeline to provide an extensibility point from which you can authorize access to a resource according to the value of incoming claims before the application code that actually implements the requested resource is called.

  • 사용 하는 경우는 ClaimsPrincipalPermission 클래스 또는 ClaimsPrincipalPermissionAttribute 명령적 또는 선언적 클레임 기반 액세스를 수행 하는 클래스 코드에서 확인 하는 데 시스템에서 애플리케이션에 대해 구성 된 클레임 인증 관리자 라고 합니다 확인 합니다.When you use the ClaimsPrincipalPermission class or the ClaimsPrincipalPermissionAttribute class to perform either imperative or declarative claims-based access checks in your code, the claims authorization manager that is configured for your application is called by the system to perform the check. 웹 기반 애플리케이션과 데스크톱 애플리케이션에서 클레임 기반 액세스 검사를 수행할 수 있습니다.Claims-based access checks can be performed in both web-based applications and desktop applications.

하지만 제공 하는 기본 구현을 합니다 ClaimsAuthorizationManager 클래스에 제공 된 각 클레임에 대 한 액세스 권한을 부여,이 클래스에서 파생 하 고 재정의할 수 있습니다는 CheckAccess 고유한 권한 부여 논리를 제공 하는 방법입니다.The default implementation provided by the ClaimsAuthorizationManager class authorizes access for each claim presented; however, you can derive from this class and override the CheckAccess method to provide your own authorization logic.

클레임 권한 부여 관리자를 사용 하는 선택 사항입니다.The use of a claims authorization manager is optional. 클레임 권한 부여 관리자를 사용 하 여 프로그래밍 방식으로 사용 하도록 애플리케이션을 구성할 수 있습니다 합니다 IdentityConfiguration 클래스 또는 선언적으로 지정 하는 <claimsAuthorizationManager>자식 요소는 요소를의 합니다 <identityConfiguration> 애플리케이션 구성 파일의 요소입니다.You can configure your application to use a claims authorization manager either programmatically by using the IdentityConfiguration class or declaratively, by specifying the <claimsAuthorizationManager> element, which is a child element of the <identityConfiguration> element in your application configuration file. 경우에 애플리케이션을 웹 사이트 또는 인터넷 정보 서비스 (IIS)에서 호스팅되는 웹 애플리케이션을 추가 해야 합니다 ClaimsAuthorizationModule ASP.NET HTTP 모듈이 컬렉션에 있습니다.If your application is a web site or a web application hosted in Internet Information Services (IIS), you must also add the ClaimsAuthorizationModule in the ASP.NET HTTP Modules collection.

중요

사용 하는 경우는 ClaimsPrincipalPermission 클래스 또는 ClaimsPrincipalPermissionAttribute 클래스 액세스 검사를 수행 하는 데 사용 되는 클레임 권한 부여 관리자는 아래에 있는 id 구성에 지정 된 것을 FederatedAuthentication.FederationConfiguration 속성입니다.When you use the ClaimsPrincipalPermission class or the ClaimsPrincipalPermissionAttribute class, the claims authorization manager that is used to perform the access check is the one that is specified in the identity configuration under the FederatedAuthentication.FederationConfiguration property. 에서는 구성 파일을 <identityConfiguration> 기본값에서 참조 되는 섹션 <federationConfiguration> 요소입니다.In a configuration file, it is the <identityConfiguration> section that is referenced from the default <federationConfiguration> element. 이 Windows Communication Foundation (WCF) 서비스 및 데스크톱 애플리케이션에도 마찬가지입니다.This is true even for Windows Communication Foundation (WCF) services and desktop applications.

ClaimsAuthorizationManager 기본 클래스의 추가 구성을 사용 하지 않으면 재정의할 수 있습니다 합니다 LoadCustomConfiguration 파생 클래스의 자식 요소에서 클레임 권한 부여 관리자의 초기화를 제공 하는 <claimsAuthorizationElement>합니다.The ClaimsAuthorizationManager base class does not take any additional configuration; however, you can override the LoadCustomConfiguration in derived classes to provide initialization of your claims authorization manager from child elements of the <claimsAuthorizationElement>. 일반적인 시나리오는 리소스에 액세스 하기 위해 필요한 클레임 형식 및 값을 결정 하는 권한 부여 정책을 지정 하려면 이러한 자식 요소를 사용 하는 것입니다.The typical scenario is to use these child elements to specify authorization policies which determine which claim types and values are required in order to gain access to which resource. 그러나 모든 사용량 및 구문에 적합 한 구현 정의 하는 하드 요구 사항이 아닙니다.This is not a hard requirement, though you are free to define whatever usage and syntax make sense for your implementation.

생성자

ClaimsAuthorizationManager() ClaimsAuthorizationManager() ClaimsAuthorizationManager() ClaimsAuthorizationManager()

ClaimsAuthorizationManager 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the ClaimsAuthorizationManager class.

메서드

CheckAccess(AuthorizationContext) CheckAccess(AuthorizationContext) CheckAccess(AuthorizationContext) CheckAccess(AuthorizationContext)

파생된 클래스에서 구현된 경우 지정된 컨텍스트의 주제에 대한 권한 부여를 확인하여 지정된 리소스에 대해 지정된 작업을 수행합니다.When implemented in a derived class, checks authorization for the subject in the specified context to perform the specified action on the specified resource.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

지정한 개체와 현재 개체가 같은지 여부를 확인합니다.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

기본 해시 함수로 작동합니다.Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

현재 인스턴스의 Type을 가져옵니다.Gets the Type of the current instance.

(Inherited from Object)
LoadCustomConfiguration(XmlNodeList) LoadCustomConfiguration(XmlNodeList) LoadCustomConfiguration(XmlNodeList) LoadCustomConfiguration(XmlNodeList)

파생 클래스에서 재정의되는 경우 XML에서 사용자 지정 구성을 로드합니다.When overridden in a derived class, loads custom configuration from XML.

MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

현재 개체를 나타내는 문자열을 반환합니다.Returns a string that represents the current object.

(Inherited from Object)

적용 대상