ClaimsPrincipalPermission 클래스

정의

ClaimsAuthorizationManager 구현을 통해 리소스에 대한 액세스 권한이 활성 보안 주체에 부여되어야 하는지를 결정하는 권한을 나타냅니다.Represents a permission that uses a ClaimsAuthorizationManager implementation to determine if access to a resource should be granted to the active principal. 이 클래스는 상속할 수 없습니다.This class cannot be inherited.

public ref class ClaimsPrincipalPermission sealed : System::Security::IPermission, System::Security::Permissions::IUnrestrictedPermission
[System.Serializable]
public sealed class ClaimsPrincipalPermission : System.Security.IPermission, System.Security.Permissions.IUnrestrictedPermission
type ClaimsPrincipalPermission = class
    interface IPermission
    interface ISecurityEncodable
    interface IUnrestrictedPermission
Public NotInheritable Class ClaimsPrincipalPermission
Implements IPermission, IUnrestrictedPermission
상속
ClaimsPrincipalPermission
특성
구현

예제

다음 예제를 사용 하 여 리소스를 보호 하는 방법을 보여 줍니다 합니다 Demand 메서드를 CheckAccess 메서드를 또는 ClaimsPrincipalPermissionAttribute 선언 합니다.The following example shows how to protect a resource by using the Demand method, the CheckAccess method, or a ClaimsPrincipalPermissionAttribute declaration. 각각의 경우 구성 된 ClaimsAuthorizationManager 가 계산 된 지정 된 리소스 및 작업에 대 한 현재 보안 주체를 호출 합니다.In each case, the configured ClaimsAuthorizationManager is invoked to evaluate the current principal against the specified resource and action. 현재 보안 주체는 지정된 된 리소스에서 지정된 된 작업에 대 한 권한이 없는 경우는 SecurityException throw 되 고, 그렇지 않으면 실행이 진행 됩니다.If the current principal is not authorized for the specified action on the specified resource, a SecurityException is thrown; otherwise, execution proceeds.

using System;
using System.Security.Permissions;
using System.Security.Principal;
using System.Threading;
using System.Security.Claims;
using System.IdentityModel.Services;

namespace ClaimsBasedAuthorization
{
    /// <summary>
    /// Program illustrates using Claims-based authorization
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            //
            // Method 1. Simple access check using static method. 
            // Expect this to be most common method.
            //
            ClaimsPrincipalPermission.CheckAccess("resource", "action");

            //
            // Method 2. Programmatic check using the permission class
            // Follows model found at http://msdn.microsoft.com/library/system.security.permissions.principalpermission.aspx
            //
            ClaimsPrincipalPermission cpp = new ClaimsPrincipalPermission("resource", "action");
            cpp.Demand();

            //
            // Method 3. Access check interacting directly with the authorization manager.
            //            
            ClaimsAuthorizationManager am = new ClaimsAuthorizationManager();
            am.CheckAccess(new AuthorizationContext((ClaimsPrincipal)Thread.CurrentPrincipal, "resource", "action"));

            //
            // Method 4. Call a method that is protected using the permission attribute class
            //
            ProtectedMethod();

            Console.WriteLine("Press [Enter] to continue.");
            Console.ReadLine();
        }

        //
        // Declarative access check using the permission class. The caller must satisfy both demands.
        //
        [ClaimsPrincipalPermission(SecurityAction.Demand, Resource = "resource", Operation = "action")]
        [ClaimsPrincipalPermission(SecurityAction.Demand, Resource = "resource1", Operation = "action1")]
        static void ProtectedMethod()
        {
        }
    }
}

다음 XML 표시를 사용자 지정 클레임 권한 부여를 사용 하는 데 필요한 최소 구성을 사용 하 여 관리자는 ClaimsPrincipalPermission 클래스입니다.The following XML shows the minimum configuration required to use a custom claims authorization manager with the ClaimsPrincipalPermission class. 선언 해야 합니다, 여기에 최소한 둘 다를 system.identityModelsystem.identityModel.services 섹션을 <configSection> 요소에서 권한 부여 관리자를 지정 합니다는 <claimsAuthorizationManager> 요소 아래에 있는 기본 id 구성이 있습니다.You must, at a minimum, declare both the system.identityModel and the system.identityModel.services sections in the <configSection> element and then specify your authorization manager in a <claimsAuthorizationManager> element under the default identity configuration. 이렇게 하면 권한 부여 관리자에 게 기본 페더레이션 구성에서 참조 되는 합니다.This will ensure that your authorization manager is referenced from the default federation configuration. 또는는 권한 부여 관리자에 지정 된 id 구성의 이름을 지정할 수 있습니다는 identityConfigurationName 특성을 <federationConfiguration> 요소입니다.Alternatively, you can specify the name of the identity configuration under which your authorization manager is specified in the identityConfigurationName attribute of the <federationConfiguration> element.

<?xml version="1.0" encoding="utf-8" ?>  
<configuration>  
  <configSections>  
    <!-- WIF configuration sections -->  
    <section name="system.identityModel" type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>  
    <section name="system.identityModel.services" type="System.IdentityModel.Services.Configuration.SystemIdentityModelServicesSection, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>  
  </configSections>  
  
  <startup>  
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />  
  </startup>  
  
  <system.identityModel>  
    <identityConfiguration>  
      <claimsAuthorizationManager type ="MyClaimsAuthorizationManager.MyClaimsAuthorizationManager, MyClaimsAuthorizationManager"/>  
    </identityConfiguration>  
  </system.identityModel>  
  
</configuration>  

설명

합니다 ClaimsPrincipalPermission 클래스를 사용 하 여 명령적 액세스 검사를 수행 하는 기능을 제공 합니다 ClaimsAuthorizationManager 애플리케이션에 대해 구성 된 합니다.The ClaimsPrincipalPermission class provides the capability to perform imperative access checks by using the ClaimsAuthorizationManager that is configured for an application. 호출 하 여 합니다 Demand 메서드 또는 정적 CheckAccess 메서드, 클레임 인증 관리자에 대해 정의 된 권한 부여 정책에 따라 코드의 실행 경로 내에서 리소스에 대 한 보호를 제공할 수 있습니다.By invoking the Demand method or the static CheckAccess method, you can provide protection to resources from within the execution path of your code according to the authorization policy defined for your claims authentication manager. 선언적 액세스 검사를 사용 하 여 수행할 수는 ClaimsPrincipalPermissionAttribute 클래스입니다.Declarative access checks can be performed by using the ClaimsPrincipalPermissionAttribute class.

중요

ClaimsPrincipalPermission 클래스에서 구성 된 클레임 인증 관리자를 사용 하는 IdentityConfiguration 아래에서 설정 된는 FederatedAuthentication.FederationConfiguration 속성.The ClaimsPrincipalPermission class uses the claims authorization manager configured by the IdentityConfiguration that is set under the FederatedAuthentication.FederationConfiguration property. 이 WS-페더레이션 사용 되지 않습니다; 시나리오에도 모든 경우에는 예를 들어 활성 (WCF) 웹 애플리케이션 및 콘솔 애플리케이션입니다.This is true in all cases, even in scenarios where WS-Federation is not used; for example, active (WCF) Web applications and Console applications. 클레임 권한 부여 관리자 구성에서 또는 프로그래밍 방식으로 지정할 수 있습니다.You can specify the claims authorization manager either in configuration or programmatically. 구성 파일에서 클레임 권한 부여 관리자를 지정 하려면 설정 합니다 <claimsAuthorizationManager> 요소 아래에 있는 <identityConfiguration> 요소에서이 id 구성을 참조 하는지 확인 합니다 <federationConfiguration> 런타임에 의해 로드 되는 요소 (예를 들어, 여 설정 된 identityConfigurationName 특성).To specify the claims authorization manager in a configuration file, set the <claimsAuthorizationManager> element under an <identityConfiguration> element and ensure that this identity configuration is referenced by the <federationConfiguration> element that is loaded by the runtime (for example, by setting the identityConfigurationName attribute). 클레임 인증 관리자를 프로그래밍 방식으로 설정 하려면에 대 한 처리기를 제공 합니다 FederatedAuthentication.FederationConfigurationCreated 이벤트입니다.To set the claims authorization manager programmatically, provide a handler for the FederatedAuthentication.FederationConfigurationCreated event.

그러나 어느 한 수준에서 제공 하는 기능 ClaimsPrincipalPermission 역할 기반 액세스 검사 (RBAC)을 통해 제공 하는 것과 비슷합니다는 PrincipalPermission 클래스는 ClaimsAuthorizationManager 활성 보안 주체를 제공한 클레임을 기반으로 하는 검사를 수행 하는 클래스입니다.On one level, the functionality provided by ClaimsPrincipalPermission is similar to the role-based access checks (RBAC) provided through the PrincipalPermission class; however, the ClaimsAuthorizationManager class performs checks based on the claims presented by the active principal. 이 통해 훨씬 더 많은 세분성 보다 많은 권한을 단일 역할에 따라 일반적으로 수집 되는 위치 순수 RBAC를 통해 사용할 수 있습니다.This enables far more granularity than is available through pure RBAC, where many permissions are typically collected under a single role. 아마도, 무엇 보다도 클레임 기반 권한 부여 권한 코드에서 리소스에 대해 특정 작업이 필요할 수 있습니다는 클레임을 구성 하려면 백 엔드 정책 사용 될 수 있으므로 보다 효과적으로 분리할 비즈니스 논리 및 권한 부여 정책 사용 하도록 설정 합니다 엔터티를 제시 수요를 충족 하기 위해 있어야 합니다.Perhaps, more importantly, claims-based authorization enables better separation of business logic and authorization policy because permission can be demanded for a specific action on a resource in code and back-end policy can be used to configure which claims the presenting entity must possess in order to satisfy the demand. RBAC와 같은 ClaimsPrincipalPermission 에서 파생 된 클래스에서 구현 하는 코드 액세스 보안과 달리, 사용자 기반 액세스 확인을를 수행 합니다 CodeAccessPermission 클래스 및 스택 워크를 사용 권한으로 코드의 모든 호출자에 게 부여 되어 있는지 확인 하는 데 ClaimsPrincipalPermission현재 보안 주체에만 해당 검사를 수행 합니다.Like RBAC, ClaimsPrincipalPermission performs a user-based access check, that is, unlike code access security implemented by classes that derive from the CodeAccessPermission class and use a stack walk to ensure that all callers of the code have been granted a permission, ClaimsPrincipalPermission performs its check only on the current principal.

정적 CheckAccess 메서드는 지정된 된 리소스에 지정 된 작업에 대 한 액세스를 확인 합니다.The static CheckAccess method checks access for a specified action on a specified resource. 리소스 및 작업은 모두 문자열은 일반적으로 Uri입니다.The resource and action are both strings and are typically URIs. 인스턴스를 초기화할 수도 ClaimsPrincipalPermission 액션 리소스 및 호출을 사용 하 여는 Demand 메서드.You can also initialize an instance of ClaimsPrincipalPermission with an action and a resource and call the Demand method. 생성자는만 단일 리소스 및 작업에 사용 되지만 ClaimsPrincipalPermission 개체를 통해 결합 될 수는 UnionIntersect 메서드.Although the constructor only takes a single resource and action, ClaimsPrincipalPermission objects can be combined through the Union and Intersect methods. 이러한 메서드를 사용 하 여 만든 권한을 여러 리소스 작업 쌍을 포함할 수 있습니다.A permission created by using these methods may contain multiple resource-action pairs.

두 메서드를 호출 하 여 액세스를 확인 합니다 ClaimsAuthorizationManager.CheckAccess 메서드를 사용 하 여 구성 된 클레임 인증 관리자의는 AuthorizationContext 활성 사용자 구성 (Thread.CurrentPrincipal), 리소스 및 작업.Both methods determine access by invoking the ClaimsAuthorizationManager.CheckAccess method of the configured claims authorization manager with an AuthorizationContext composed of the active principal (Thread.CurrentPrincipal), the resource, and the action. Throw를 SecurityException 현재 보안 주체는 리소스에서 작업을 수행할 권한이 없으면이 고, 그렇지 실행 됩니다.They throw a SecurityException if the current principal is not authorized to perform the action on the resource; otherwise, execution proceeds.

경우는 ClaimsPrincipalPermission 여러 리소스 작업 쌍을 포함 하는 ClaimsAuthorizationManager.CheckAccess 각 권한에 포함 된 리소스 작업 쌍에 대 한 메서드가 호출 됩니다.In the case of a ClaimsPrincipalPermission that contains multiple resource-action pairs, the ClaimsAuthorizationManager.CheckAccess method is invoked for each of the resource-action pairs contained in the permission. 에 대 한 호출에 대 한 Demand 성공 하려면 활성 사용자 권한에 포함 된 리소스 작업 쌍의 모든 권한이 있어야 합니다.For the call to Demand to succeed, the active principal must be authorized for all of the resource-action pairs contained in the permission.

생성자

ClaimsPrincipalPermission(String, String)

ClaimsPrincipalPermission 클래스의 새 인스턴스를 만듭니다.Creates a new instance of the ClaimsPrincipalPermission class.

메서드

CheckAccess(String, String)

현재 보안 주체가 지정된 된 리소스에서 지정 된 작업을 수행할 권한이 있는지 확인 합니다.Checks if the current principal is authorized to perform the specified action on the specified resource.

Copy()

현재 ClaimsPrincipalPermission 인스턴스의 복사본을 반환합니다.Returns a copy of the current ClaimsPrincipalPermission instance.

Demand()

현재 사용자가 현재 인스턴스와 연결 된 리소스 작업 쌍에 대 한 권한이 있는지 확인 합니다.Checks if the current principal is authorized for the resource-action pairs associated with the current instance.

Equals(Object)

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

(다음에서 상속됨 Object)
FromXml(SecurityElement)

현재 사용 권한과 지정 된 XML 인코딩을에서 해당 상태를 다시 생성합니다.Reconstructs the current permission and its state from the specified XML encoding.

GetHashCode()

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

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

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

(다음에서 상속됨 Object)
Intersect(IPermission)

현재 사용 권한 및 지정한 사용 권한의 교집합에 해당 하는 권한을 반환 합니다.Returns a permission that is the intersection of the current permission and the specified permission.

IsSubsetOf(IPermission)

현재 사용 권한과 지정된 된 사용 권한의 하위 집합 인지 여부를 나타내는 값을 반환 합니다.Returns a value that indicates whether current permission is a subset of the specified permission.

IsUnrestricted()

사용 권한이 제한되지 않았는지 여부를 나타내는 값을 반환합니다.Returns a value that indicates whether the permission is unrestricted.

MemberwiseClone()

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

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

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

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

XML로 인코딩된 현재 사용 권한 및 해당 상태 형식을 반환합니다.Returns the XML encoded form of the current permission and its state.

Union(IPermission)

현재 사용 권한 및 지정한 사용 권한의 합집합에 해당 하는 새 권한을 반환 합니다.Returns a new permission that is the union of the current permission and the specified permission. 현재 인스턴스 및 대상 인스턴스에 존재하는 리소스-작업 쌍을 모두 보유하는 ClaimsPrincipalPermission 개체입니다.ClaimsPrincipalPermission object that has all of the resource-action pairs that are present in the current instance and the target instance.

적용 대상

추가 정보