ClaimsAuthorizationManager.CheckAccess(AuthorizationContext) ClaimsAuthorizationManager.CheckAccess(AuthorizationContext) ClaimsAuthorizationManager.CheckAccess(AuthorizationContext) ClaimsAuthorizationManager.CheckAccess(AuthorizationContext) Method

정의

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

public:
 virtual bool CheckAccess(System::Security::Claims::AuthorizationContext ^ context);
public virtual bool CheckAccess (System.Security.Claims.AuthorizationContext context);
abstract member CheckAccess : System.Security.Claims.AuthorizationContext -> bool
override this.CheckAccess : System.Security.Claims.AuthorizationContext -> bool
Public Overridable Function CheckAccess (context As AuthorizationContext) As Boolean

매개 변수

context
AuthorizationContext AuthorizationContext AuthorizationContext AuthorizationContext

권한 부여를 확인할 주체, 리소스 및 작업이 포함된 권한 부여 컨텍스트입니다.The authorization context that contains the subject, resource, and action for which authorization is to be checked.

반환

지정된 리소스에 대한 지정된 작업을 수행할 수 있는 권한이 주제에 부여되었으면 true이고, 그렇지 않으면 false입니다.true if the subject is authorized to perform the specified action on the specified resource; otherwise, false.

예제

에 사용 되는 코드 예제는 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.

다음 코드에서는 재정의 CheckAccess 메서드.The following code shows the override of the CheckAccess method. 이 메서드를 부여 하거나 읽고 구성 파일에서 컴파일된 정책에 따라 액세스를 거부 합니다.This method grants or denies access based on a policy read and compiled from the configuration file.

static Dictionary<ResourceAction, Func<ClaimsPrincipal, bool>> _policies = new Dictionary<ResourceAction, Func<ClaimsPrincipal, bool>>();
PolicyReader _policyReader = new PolicyReader();
    /// <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;
        }
    }
}

클레임 권한 부여 관리자에서 사용 된 정책 사용자 지정 된 <policy> 아래에 요소를 <claimsAuthorizationManager> 요소입니다.The policy used by the claims authorization manager is specified by custom <policy> elements under the <claimsAuthorizationManager> element. 이 정책을 읽고 여 컴파일되는 LoadCustomConfiguration 메서드.This policy is read and compiled by the LoadCustomConfiguration method. 첫 번째 정책에서 하나 지정된 된 리소스에서 지정 된 작업을 수행 하기 위해 지정된 된 클레임 보안 주체가 있어야 합니다.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.

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

설명

기본 구현에서는 항상 반환 true에 대 한 액세스 권한을 부여 하는 합니다.The base implementation always returns true, which authorizes access. RP 애플리케이션의 요구 사항에 따라 액세스 권한을 부여 하는 파생된 클래스에서이 메서드를 재정의할 수 있습니다.You can override this method in a derived class to authorize access based on the requirements of your RP application. 이 메서드가 반환 하는 경우 false, Windows Identity Foundation (WIF) 호출자에 게 권한이 없음된 오류가 반환; 그렇지 않으면, 실행 RP 애플리케이션에 전달 됩니다.If this method returns false, Windows Identity Foundation (WIF) returns an unauthorized error to the caller; otherwise, execution is passed to the RP application.

적용 대상