ClaimsAuthorizationManager.CheckAccess(AuthorizationContext) 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
파생된 클래스에서 구현된 경우 지정된 컨텍스트의 주제에 대한 권한 부여를 확인하여 지정된 리소스에 대해 지정된 작업을 수행합니다.
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
권한 부여를 확인할 주체, 리소스 및 작업이 포함된 권한 부여 컨텍스트입니다.
반환
지정된 리소스에 대한 지정된 작업을 수행할 수 있는 권한이 주제에 부여되었으면 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 애플리케이션에 전달 됩니다.