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
屬性
實作

範例

下列範例示範如何使用 方法、CheckAccess方法或ClaimsPrincipalPermissionAttribute宣告來保護資源Demand。 在每個案例中,都會叫用已設定 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 所需的最小組態。 您至少必須宣告 system.identityModel 元素中的 <configSection>system.identityModel.services 區段,然後在預設身分識別組態下的 claimsAuthorizationManager> 元素中<指定授權管理員。 這可確保您的授權管理員會從預設同盟組態參考。 或者,您也可以指定在 federationConfiguration 元素的 屬性<中指定授權管理員的身分識別組態>名稱。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會使用 由屬性下設定的 FederatedAuthentication.FederationConfiguration 宣告授權管理員IdentityConfiguration。 在所有情況下都是如此,即使在未使用 WS-Federation 的情況下也是如此;例如,使用中 (WCF) Web 應用程式和控制台應用程式。 您可以在組態中或以程序設計方式指定宣告授權管理員。 若要在組態檔中指定宣告授權管理員,請在 identityConfiguration 元素下<設定 claimsAuthorizationManager 元素,並確定運行時間所載入的 federationConfiguration>>元素會參考<此身分識別組態,identityConfigurationName例如設定屬性 () 。>< 若要以程式設計方式設定宣告授權管理員,請提供 事件的處理程式 FederatedAuthentication.FederationConfigurationCreated

在一個層級上,所提供的 ClaimsPrincipalPermission 功能類似於角色型存取檢查, (透過 類別提供的 RBAC) PrincipalPermission ;不過,類別會 ClaimsAuthorizationManager 根據使用中主體所提供的宣告來執行檢查。 這比透過純 RBAC 提供的數據粒度還要多,其中許多許可權通常會在單一角色下收集。 或許更重要的是,宣告型授權能夠更妥善地分隔商業規則和授權原則,因為程式代碼中資源上可以要求許可權,而後端原則可用來設定呈現實體必須擁有哪些宣告,才能滿足需求。 如同 RBAC, ClaimsPrincipalPermission 會執行以使用者為基礎的存取檢查,也就是說,不同於衍生自 CodeAccessPermission 類別的類別所實作的程式代碼存取安全性,並使用堆疊逐步解說來確保程式代碼的所有呼叫端都已獲得許可權, ClaimsPrincipalPermission 只對目前的主體執行其檢查。

靜態 CheckAccess 方法會檢查指定資源上指定動作的存取權。 資源和動作都是字串,通常是URI。 您也可以使用動作和資源初始化 的 ClaimsPrincipalPermission 實例,並呼叫 Demand 方法。 雖然建構函式只會採用單一資源和動作, ClaimsPrincipalPermission 但物件可以透過 UnionIntersect 方法合併。 使用這些方法所建立的許可權可能包含多個資源動作組。

這兩種方法都會藉由叫 ClaimsAuthorizationManager.CheckAccess 用已設定宣告授權管理員的 方法來決定存取權,其中包含 AuthorizationContext 作用中主體 () Thread.CurrentPrincipal 、資源和動作。 如果目前主體未獲授權對資源執行動作,則會擲 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物件,含有所有出現在目前執行個體及目標執行個體的來源-動作組。

適用於

另請參閱