다음을 통해 공유


ClaimsPrincipalPermission 클래스

정의

ClaimsAuthorizationManager 구현을 통해 리소스에 대한 액세스 권한이 활성 보안 주체에 부여되어야 하는지를 결정하는 권한을 나타냅니다. 이 클래스는 상속될 수 없습니다.

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
[<System.Serializable>]
type ClaimsPrincipalPermission = class
    interface IPermission
    interface ISecurityEncodable
    interface IUnrestrictedPermission
Public NotInheritable Class ClaimsPrincipalPermission
Implements IPermission, IUnrestrictedPermission
상속
ClaimsPrincipalPermission
특성
구현

예제

다음 예제를 사용 하 여 리소스를 보호 하는 방법을 보여 줍니다 합니다 Demand 메서드를 CheckAccess 메서드를 또는 ClaimsPrincipalPermissionAttribute 선언 합니다. 각각의 경우 구성 된 ClaimsAuthorizationManager 가 계산 된 지정 된 리소스 및 작업에 대 한 현재 보안 주체를 호출 합니다. 현재 보안 주체는 지정된 된 리소스에서 지정된 된 작업에 대 한 권한이 없는 경우는 SecurityException throw 되 고, 그렇지 않으면 실행이 진행 됩니다.

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

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 클래스입니다. 최소한 요소에서 system.identityModelsystem.identityModel.services 섹션 <configSection> 을 모두 선언한 다음 기본 ID 구성 아래의 claimsAuthorizationManager> 요소에서< 권한 부여 관리자를 지정해야 합니다. 이렇게 하면 권한 부여 관리자에 게 기본 페더레이션 구성에서 참조 되는 합니다. 또는 federationConfiguration> 요소의 특성에 권한 부여 관리자가 지정된 ID 구성의< 이름을 지정할 수 있습니다.identityConfigurationName

<?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 애플리케이션에 대해 구성 된 합니다. 호출 하 여 합니다 Demand 메서드 또는 정적 CheckAccess 메서드, 클레임 인증 관리자에 대해 정의 된 권한 부여 정책에 따라 코드의 실행 경로 내에서 리소스에 대 한 보호를 제공할 수 있습니다. 선언적 액세스 검사를 사용 하 여 수행할 수는 ClaimsPrincipalPermissionAttribute 클래스입니다.

중요

ClaimsPrincipalPermission 클래스에서 구성 된 클레임 인증 관리자를 사용 하는 IdentityConfiguration 아래에서 설정 된는 FederatedAuthentication.FederationConfiguration 속성. 이 WS-페더레이션 사용 되지 않습니다; 시나리오에도 모든 경우에는 예를 들어 활성 (WCF) 웹 애플리케이션 및 콘솔 애플리케이션입니다. 클레임 권한 부여 관리자 구성에서 또는 프로그래밍 방식으로 지정할 수 있습니다. 구성 파일에서 클레임 권한 부여 관리자를 지정하려면 identityConfiguration> 요소 아래에<claimsAuthorizationManager> 요소를 설정하고< 이 ID 구성이 런타임에 의해 <로드되는 federationConfiguration> 요소(예: 특성 설정identityConfigurationName)에서 참조되는지 확인합니다. 클레임 인증 관리자를 프로그래밍 방식으로 설정 하려면에 대 한 처리기를 제공 합니다 FederatedAuthentication.FederationConfigurationCreated 이벤트입니다.

그러나 어느 한 수준에서 제공 하는 기능 ClaimsPrincipalPermission 역할 기반 액세스 검사 (RBAC)을 통해 제공 하는 것과 비슷합니다는 PrincipalPermission 클래스는 ClaimsAuthorizationManager 활성 보안 주체를 제공한 클레임을 기반으로 하는 검사를 수행 하는 클래스입니다. 이 통해 훨씬 더 많은 세분성 보다 많은 권한을 단일 역할에 따라 일반적으로 수집 되는 위치 순수 RBAC를 통해 사용할 수 있습니다. 아마도, 무엇 보다도 클레임 기반 권한 부여 권한 코드에서 리소스에 대해 특정 작업이 필요할 수 있습니다는 클레임을 구성 하려면 백 엔드 정책 사용 될 수 있으므로 보다 효과적으로 분리할 비즈니스 논리 및 권한 부여 정책 사용 하도록 설정 합니다 엔터티를 제시 수요를 충족 하기 위해 있어야 합니다. RBAC와 같은 ClaimsPrincipalPermission 에서 파생 된 클래스에서 구현 하는 코드 액세스 보안과 달리, 사용자 기반 액세스 확인을를 수행 합니다 CodeAccessPermission 클래스 및 스택 워크를 사용 권한으로 코드의 모든 호출자에 게 부여 되어 있는지 확인 하는 데 ClaimsPrincipalPermission현재 보안 주체에만 해당 검사를 수행 합니다.

정적 CheckAccess 메서드는 지정된 된 리소스에 지정 된 작업에 대 한 액세스를 확인 합니다. 리소스 및 작업은 모두 문자열은 일반적으로 Uri입니다. 인스턴스를 초기화할 수도 ClaimsPrincipalPermission 액션 리소스 및 호출을 사용 하 여는 Demand 메서드. 생성자는만 단일 리소스 및 작업에 사용 되지만 ClaimsPrincipalPermission 개체를 통해 결합 될 수는 UnionIntersect 메서드. 이러한 메서드를 사용 하 여 만든 권한을 여러 리소스 작업 쌍을 포함할 수 있습니다.

두 메서드를 호출 하 여 액세스를 확인 합니다 ClaimsAuthorizationManager.CheckAccess 메서드를 사용 하 여 구성 된 클레임 인증 관리자의는 AuthorizationContext 활성 사용자 구성 (Thread.CurrentPrincipal), 리소스 및 작업. Throw를 SecurityException 현재 보안 주체는 리소스에서 작업을 수행할 권한이 없으면이 고, 그렇지 실행 됩니다.

경우는 ClaimsPrincipalPermission 여러 리소스 작업 쌍을 포함 하는 ClaimsAuthorizationManager.CheckAccess 각 권한에 포함 된 리소스 작업 쌍에 대 한 메서드가 호출 됩니다. 에 대 한 호출에 대 한 Demand 성공 하려면 활성 사용자 권한에 포함 된 리소스 작업 쌍의 모든 권한이 있어야 합니다.

생성자

ClaimsPrincipalPermission(String, String)

ClaimsPrincipalPermission 클래스의 새 인스턴스를 만듭니다.

메서드

CheckAccess(String, String)

지정된 리소스에 대해 지정된 작업을 수행할 수 있는 권한이 현재 주체에 부여되었는지 여부를 확인합니다.

Copy()

현재 ClaimsPrincipalPermission 인스턴스의 복사본을 반환합니다.

Demand()

현재 인스턴스와 연결된 리소스 작업 쌍에 대한 권한이 현재 주체에 부여되었는지 여부를 확인합니다.

Equals(Object)

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

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

지정된 XML 인코딩에서 현재 사용 권한 및 상태를 다시 생성합니다.

GetHashCode()

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

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

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

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

현재 권한과 지정된 권한의 교집합에 해당하는 권한을 반환합니다.

IsSubsetOf(IPermission)

현재 사용 권한이 지정된 사용 권한의 하위 집합인지 여부를 나타내는 값을 반환합니다.

IsUnrestricted()

사용 권한이 제한되지 않았는지 여부를 나타내는 값을 반환합니다.

MemberwiseClone()

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

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

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

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

XML로 인코딩된 현재 사용 권한 및 해당 상태 형식을 반환합니다.

Union(IPermission)

현재 권한과 지정된 권한의 합집합에 해당하는 새 권한을 반환합니다. 현재 인스턴스 및 대상 인스턴스에 존재하는 리소스-작업 쌍을 모두 보유하는 ClaimsPrincipalPermission 개체입니다.

적용 대상

추가 정보