ClaimsPrincipalPermission 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
表示權限,會使用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 但物件可以透過 Union 和 Intersect 方法合併。 使用這些方法所建立的許可權可能包含多個資源動作組。
這兩種方法都會藉由叫 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物件,含有所有出現在目前執行個體及目標執行個體的來源-動作組。 |