Share via


ClaimsAuthorizationManager.CheckAccess(AuthorizationContext) 메서드

정의

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

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

권한 부여를 확인할 주체, 리소스 및 작업이 포함된 권한 부여 컨텍스트입니다.

반환

Boolean

지정된 리소스에 대한 지정된 작업을 수행할 수 있는 권한이 주제에 부여되었으면 true이고, 그렇지 않으면 false입니다.

예제

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

다음 코드는 메서드의 재정의를 CheckAccess 보여줍니다. 이 메서드는 구성 파일에서 읽고 컴파일한 정책에 따라 액세스 권한을 부여하거나 거부합니다.

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


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

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

<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합니다. RP 애플리케이션의 요구 사항에 따라 액세스 권한을 부여 하는 파생된 클래스에서이 메서드를 재정의할 수 있습니다. 이 메서드가 반환 하는 경우 false, Windows Identity Foundation (WIF) 호출자에 게 권한이 없음된 오류가 반환; 그렇지 않으면, 실행 RP 애플리케이션에 전달 됩니다.

적용 대상