다음을 통해 공유


ClaimsAuthorizationManager 클래스

정의

클레임 권한 부여 관리자에 대한 기본 구현을 정의합니다.

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

예제

에 사용 되는 코드 예제는 ClaimsAuthorizationManager 항목에서 수행 되는 Claims Based Authorization 샘플. 이 샘플 구성에 지정 된 정책에 따라 주체 권한을 부여할 수 있는 사용자 지정 클레임 권한 부여 관리자를 제공 합니다. 사용자 지정 클레임 권한 부여 관리자는 관리자를 구현하는 에서 ClaimsAuthorizationManager 파생된 클래스, 리소스와 작업을 페어링하는 클래스, ResourceAction 구성 파일에 지정된 정책을 읽고 컴파일하는 정책 판독기의 세 가지 기본 구성 요소로 구성됩니다. 이 정책 수를 컴파일된 다음 리소스에 대 한 액세스 권한을 부여 하기 위해 보안 주체를 평가 하기 위해 클레임 인증 관리자에서 사용할 수 있습니다. 일부 요소는 간단히 하기 위해 표시 됩니다. 이 샘플 및 사용할 수 있는 다른 샘플에 대 한 WIF에 대 한 다운로드 위치에 대 한, 참조 WIF 코드 샘플 인덱스합니다.

다음 코드는 사용자 지정 클레임 권한 부여 관리자의 구현을 보여줍니다. 메서드는 LoadCustomConfiguration 정책 판독기 도우미 클래스(표시되지 않음)를 사용하여 구성에서 정책을 읽고 컴파일하며 CheckAccess 메서드는 이 정책에 따라 액세스 권한을 부여하거나 거부합니다.

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 있습니다.

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에서 호스팅되는 웹 애플리케이션에 대 한 위의 권한 부여 관리자 클레임을 구성 하는 방법을 보여 줍니다. 클레임 권한 부여 관리자의 구성과 관련된 요소만 표시됩니다. 클래스에 대한 참조는 ClaimsAuthorizationModule 요소 아래 <system.Webserver> 의 파이프라인에 추가되어야 합니다. 사이트 및 IIS 7 이전의 IIS 버전에서 호스팅되는 애플리케이션에 대 한 모듈에서 파이프라인에 추가할 있습니다를 <system.Web> 요소입니다. 이 구성은 표시되지만 주석 처리됩니다.

클레임 권한 부여 관리자에서 사용하는 정책은 claimsAuthorizationManager> 요소 아래의< 사용자 지정 <policy> 요소에 의해 지정됩니다. 첫 번째 정책에서 하나 지정된 된 리소스에서 지정 된 작업을 수행 하기 위해 지정된 된 클레임 보안 주체가 있어야 합니다. 두 번째 정책에서 보안 주체 모두 클레임을 지정된 된 리소스에서 지정 된 작업을 수행할 수 있어야 합니다. 나머지 모든 보안 주체가 소유 하는 클레임에 관계 없이 액세스를 자동으로 부여 됩니다.

<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 클레임 권한 부여 관리자에 대한 기본 구현을 제공합니다. 클레임 권한 부여 관리자는 다음 두 가지 시나리오에서 사용할 수 있습니다.

  • 웹 기반 애플리케이션 및 서비스에서 클레임 권한 부여 관리자를 처리 파이프라인에 추가하여 요청된 리소스를 실제로 구현하는 애플리케이션 코드가 호출되기 전에 들어오는 클레임 값에 따라 리소스에 대한 액세스 권한을 부여할 수 있는 확장성 지점을 제공할 수 있습니다.

  • 사용 하는 경우는 ClaimsPrincipalPermission 클래스 또는 ClaimsPrincipalPermissionAttribute 명령적 또는 선언적 클레임 기반 액세스를 수행 하는 클래스 코드에서 확인 하는 데 시스템에서 애플리케이션에 대해 구성 된 클레임 인증 관리자 라고 합니다 확인 합니다. 웹 기반 애플리케이션과 데스크톱 애플리케이션에서 클레임 기반 액세스 검사를 수행할 수 있습니다.

클래스에서 ClaimsAuthorizationManager 제공하는 기본 구현은 제공된 각 클레임에 대한 액세스 권한을 부여합니다. 그러나 이 클래스에서 파생되고 메서드를 재정의 CheckAccess 하여 고유한 권한 부여 논리를 제공할 수 있습니다.

클레임 권한 부여 관리자의 사용은 선택 사항입니다. 애플리케이션 구성 파일에서 identityConfiguration> 요소의< 자식 요소인 claimsAuthorizationManager> 요소를 지정하여< 클래스를 사용하여 IdentityConfiguration 프로그래밍 방식으로 또는 선언적으로 클레임 권한 부여 관리자를 사용하도록 애플리케이션을 구성할 수 있습니다. 경우에 애플리케이션을 웹 사이트 또는 인터넷 정보 서비스 (IIS)에서 호스팅되는 웹 애플리케이션을 추가 해야 합니다 ClaimsAuthorizationModule ASP.NET HTTP 모듈이 컬렉션에 있습니다.

중요

클래스 또는 클래스를 ClaimsPrincipalPermissionClaimsPrincipalPermissionAttribute 사용하는 경우 액세스 확인을 수행하는 데 사용되는 클레임 권한 부여 관리자는 속성 아래 FederatedAuthentication.FederationConfiguration 의 ID 구성에 지정된 권한 부여 관리자입니다. 구성 파일 <identityConfiguration> 에서 기본 <federationConfiguration> 요소에서 참조되는 섹션입니다. 이 Windows Communication Foundation (WCF) 서비스 및 데스크톱 애플리케이션에도 마찬가지입니다.

기본 클래스는 ClaimsAuthorizationManager 추가 구성을 사용하지 않지만 파생 클래스의 를 재정 LoadCustomConfiguration 의하여 의 <claimsAuthorizationElement>자식 요소에서 클레임 권한 부여 관리자를 초기화할 수 있습니다. 일반적인 시나리오는 이러한 자식 요소를 사용하여 어떤 리소스에 액세스하기 위해 필요한 클레임 유형 및 값을 결정하는 권한 부여 정책을 지정하는 것입니다. 구현에 적합한 사용법과 구문을 자유롭게 정의할 수 있지만 이는 어려운 요구 사항은 아닙니다.

생성자

ClaimsAuthorizationManager()

ClaimsAuthorizationManager 클래스의 새 인스턴스를 초기화합니다.

메서드

CheckAccess(AuthorizationContext)

파생된 클래스에서 구현된 경우 지정된 컨텍스트의 주제에 대한 권한 부여를 확인하여 지정된 리소스에 대해 지정된 작업을 수행합니다.

Equals(Object)

지정된 개체가 현재 개체와 같은지 확인합니다.

(다음에서 상속됨 Object)
GetHashCode()

기본 해시 함수로 작동합니다.

(다음에서 상속됨 Object)
GetType()

현재 인스턴스의 Type을 가져옵니다.

(다음에서 상속됨 Object)
LoadCustomConfiguration(XmlNodeList)

파생 클래스에서 재정의되는 경우 XML에서 사용자 지정 구성을 로드합니다.

MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.

(다음에서 상속됨 Object)
ToString()

현재 개체를 나타내는 문자열을 반환합니다.

(다음에서 상속됨 Object)

적용 대상