次の方法で共有


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 がスローされます。それ以外の場合は実行が続行されます。

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 示しています。 少なくとも、 要素の セクションと セクション<configSection>の両方system.identityModelsystem.identityModel.services宣言し、既定の ID 構成で claimsAuthorizationManager> 要素に<承認マネージャーを指定する必要があります。 これにより、承認マネージャーが既定のフェデレーション構成から参照されるようになります。 または、federationConfiguration 要素の属性でidentityConfigurationName承認マネージャーを指定する ID 構成の名前を<指定することもできます。>

<?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 して命令型アクセス チェックを実行する機能を提供します。 メソッドまたは静的CheckAccessメソッドをDemand呼び出すことで、要求認証マネージャーに定義されている承認ポリシーに従って、コードの実行パス内からリソースに保護を提供できます。 宣言型アクセス チェックは、 クラスを使用 ClaimsPrincipalPermissionAttribute して実行できます。

重要

クラスは ClaimsPrincipalPermission 、 プロパティの下に設定されている によって IdentityConfiguration 構成されたクレーム承認マネージャーを FederatedAuthentication.FederationConfiguration 使用します。 これは、WS-Federation が使用されないシナリオでも、すべての場合に当てはまります。たとえば、アクティブ (WCF) Web アプリケーションやコンソール アプリケーションなどです。 要求承認マネージャーは、構成で指定することも、プログラムで指定することもできます。 構成ファイルでクレーム承認マネージャーを指定するには、identityConfiguration> 要素の下に claimsAuthorizationManager 要素を<設定<し、この ID 構成がランタイムによって読み込まれる federationConfiguration 要素によって参照されていることを確認します (たとえば、 属性を設定します)。>><identityConfigurationName プログラムで要求承認マネージャーを設定するには、 イベントのハンドラーを FederatedAuthentication.FederationConfigurationCreated 指定します。

1 つのレベルでは、 によって ClaimsPrincipalPermission 提供される機能は、 クラスを通じて PrincipalPermission 提供されるロールベースのアクセス チェック (RBAC) に似ていますが、クラスは ClaimsAuthorizationManager アクティブ プリンシパルによって提示された要求に基づいてチェックを実行します。 これにより、多くのアクセス許可が通常 1 つのロールで収集される純粋な RBAC を通じて使用できるよりもはるかに細かい粒度が可能になります。 おそらく、より重要なのは、クレームベースの承認により、コード内のリソースに対する特定のアクションに対するアクセス許可を要求できるため、ビジネス ロジックと承認ポリシーをより適切に分離でき、バックエンド ポリシーを使用して、要求を満たすために提示側エンティティが所有する必要があるクレームを構成できるためです。 RBAC と同様に、ClaimsPrincipalPermissionユーザーベースのアクセス チェックを実行します。つまり、クラスからCodeAccessPermission派生したクラスによって実装されるコード アクセス セキュリティとは異なり、スタック ウォークを使用して、コードのすべての呼び出し元にアクセス許可が付与されていることを確認し、ClaimsPrincipalPermission現在のプリンシパルに対してのみそのチェックを実行します。

静的 CheckAccess メソッドは、指定されたリソースに対する指定されたアクションのアクセスをチェックします。 リソースとアクションはどちらも文字列であり、通常は URI です。 アクションとリソースを使用して の ClaimsPrincipalPermission インスタンスを初期化し、 メソッドを Demand 呼び出すこともできます。 コンストラクターは 1 つのリソースとアクションのみを受け取りますが、 ClaimsPrincipalPermission メソッドと Intersect メソッドを使用してオブジェクトをUnion組み合わせることができます。 これらのメソッドを使用して作成されたアクセス許可には、複数のリソースとアクションのペアが含まれている場合があります。

どちらのメソッドも、アクティブ プリンシパル (Thread.CurrentPrincipal)、リソース、およびアクションで構成されたクレーム承認マネージャーAuthorizationContextのメソッドを呼び出ClaimsAuthorizationManager.CheckAccessすことによってアクセスを決定します。 現在のプリンシパルがリソースに対してアクションを実行する権限がない場合は をスロー 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)

現在のアクセス許可と指定したアクセス許可を統合 (論理積) して 1 つの新しいアクセス許可を返します。

IsSubsetOf(IPermission)

現在のアクセス許可が、指定したアクセス許可のサブセットであるかどうかを示す値を返します。

IsUnrestricted()

アクセス許可が無制限かどうかを示す値を返します。

MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)
ToXml()

現在のアクセス許可とその状態の XML にエンコードされたフォームを返します。

Union(IPermission)

現在のアクセス許可と指定したアクセス許可を統合 (和集合) して 1 つの新しいアクセス許可を返します。 現在のインスタンスとターゲット インスタンスにあるリソース操作のペアすべてがある ClaimsPrincipalPermission のオブジェクト。

適用対象

こちらもご覧ください