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で指定されたアクションに対して承認されていない場合は、がスローされます。それ以外の場合は、実行が続行されます。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.identityModel <configSection>要素のsystem.identityModel.servicesセクションとセクションの両方を宣言 <し、次に 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. または、 identityConfigurationName <federationConfiguration要素の属性で承認マネージャーを指定するときに使用するid構成の名前を指定することもできます。> 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は、プロパティのFederatedAuthentication.FederationConfiguration下に設定されIdentityConfigurationているによって構成される要求承認マネージャーを使用します。The ClaimsPrincipalPermission class uses the claims authorization manager configured by the IdentityConfiguration that is set under the FederatedAuthentication.FederationConfiguration property. これは、WS-FEDERATION が使用されていない場合でも、すべての場合に当てはまります。たとえば、アクティブな (WCF) Web アプリケーションやコンソールアプリケーションなどです。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> 要素 <> に次のように設定します。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.

1つのレベルでは、にClaimsPrincipalPermissionよって提供される機能は、 PrincipalPermissionクラスを通じて提供されるロールベースのアクセスチェックClaimsAuthorizationManager (RBAC) と似ています。ただし、クラスは、アクティブなプリンシパルによって提示される要求に基づいてチェックを実行します。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 を通じて使用できるよりもはるかに粒度が高くなります。多くのアクセス許可は通常1つのロールで収集されます。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. コンストラクターは1つのリソースとアクションClaimsPrincipalPermissionのみを受け取りますが、オブジェクトは、メソッドIntersect Unionとメソッドを使用して組み合わせることができます。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. 現在のプリンシパル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)

現在のアクセス許可と指定したアクセス許可を統合 (論理積) して 1 つの新しいアクセス許可を返します。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)

現在のアクセス許可と指定したアクセス許可を統合 (和集合) して 1 つの新しいアクセス許可を返します。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.

適用対象

こちらもご覧ください