ClaimsAuthorizationManager.CheckAccess(AuthorizationContext) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
在衍生類別中實作時,檢查指定之內容中主題的授權,才能對指定的資源上執行指定的動作。
public:
virtual bool CheckAccess(System::Security::Claims::AuthorizationContext ^ context);
public virtual bool CheckAccess (System.Security.Claims.AuthorizationContext context);
abstract member CheckAccess : System.Security.Claims.AuthorizationContext -> bool
override this.CheckAccess : System.Security.Claims.AuthorizationContext -> bool
Public Overridable Function CheckAccess (context As AuthorizationContext) As Boolean
參數
- context
- AuthorizationContext
授權內容,其中包含授權要檢查的主旨、資源及動作。
傳回
如果主體獲得授權,可以對指定的資源執行指定的動作,則為 true
,否則為 false
。
範例
主題中使用的 ClaimsAuthorizationManager 程式碼範例取自 Claims Based Authorization
範例。 此範例提供自訂宣告授權管理員,可根據組態中指定的原則來授權主體。 自訂宣告授權管理員包含三個基本元件:衍生自 ClaimsAuthorizationManager 的類別,該類別會實作管理員、 ResourceAction
配對資源與動作的類別,以及讀取和編譯組態檔中指定的原則讀取器。 宣告授權管理員接著可以使用這個編譯的原則來評估主體,以授權存取資源。 並非所有元素都是為了簡潔起見而顯示。 如需此範例和其他可供 WIF 使用之範例以及下載位置的相關資訊,請參閱 WIF 程式碼範例索引。
下列程式碼顯示 方法的 CheckAccess 覆寫。 此方法會根據從組態檔讀取和編譯的原則,授與或拒絕存取權。
static Dictionary<ResourceAction, Func<ClaimsPrincipal, bool>> _policies = new Dictionary<ResourceAction, Func<ClaimsPrincipal, bool>>();
PolicyReader _policyReader = new PolicyReader();
/// <summary>
/// Checks if the principal specified in the authorization context is authorized to perform action specified in the authorization context
/// on the specified resoure
/// </summary>
/// <param name="pec">Authorization context</param>
/// <returns>true if authorized, false otherwise</returns>
public override bool CheckAccess(AuthorizationContext pec)
{
//
// Evaluate the policy against the claims of the
// principal to determine access
//
bool access = false;
try
{
ResourceAction ra = new ResourceAction(pec.Resource.First<Claim>().Value, pec.Action.First<Claim>().Value);
access = _policies[ra](pec.Principal);
}
catch (Exception)
{
access = false;
}
return access;
}
}
下列程式碼顯示 ResourceAction
自訂宣告管理員所使用的類別。
using System;
namespace ClaimsAuthorizationLibrary
{
/// <summary>
/// Class to encapsulate resource/action pair
/// </summary>
public class ResourceAction
{
public string Resource;
public string Action;
/// <summary>
/// Checks if the current instance is equal to the given object by comparing the resource and action values
/// </summary>
/// <param name="obj">object to compare to</param>
/// <returns>True if equal, else false.</returns>
public override bool Equals(object obj)
{
ResourceAction ra = obj as ResourceAction;
if (ra != null)
{
return ((string.Compare(ra.Resource, Resource, true) == 0) && (string.Compare(ra.Action, Action, true) == 0));
}
return base.Equals(obj);
}
/// <summary>
/// Gets the hash code.
/// </summary>
/// <returns>The hash code.</returns>
public override int GetHashCode()
{
return (Resource + Action).ToLower().GetHashCode();
}
/// <summary>
/// Creates an instance of ResourceAction class.
/// </summary>
/// <param name="resource">The resource name.</param>
/// <param name="action">The action.</param>
/// <exception cref="ArgumentNullException">when <paramref name="resource"/> is null</exception>
public ResourceAction(string resource, string action)
{
if (string.IsNullOrEmpty(resource))
{
throw new ArgumentNullException("resource");
}
Resource = resource;
Action = action;
}
}
}
宣告授權管理員所使用的原則是由claimsAuthorizationManager > 元素下的 < 自訂 <policy>
元素所指定。 這個原則是由 LoadCustomConfiguration 方法讀取和編譯。 在第一個原則中,主體必須擁有其中一個指定的宣告,才能對指定的資源執行指定的動作。 在第二個原則中,主體必須擁有這兩個宣告,才能對指定的資源執行指定的動作。 在所有其他情況下,不論主體擁有的宣告為何,都會自動授與存取權。
<system.identityModel>
<identityConfiguration>
<claimsAuthorizationManager type="ClaimsAuthorizationLibrary.MyClaimsAuthorizationManager, ClaimsAuthorizationLibrary">
<policy resource="http://localhost:28491/Developers.aspx" action="GET">
<or>
<claim claimType="http://schemas.microsoft.com/ws/2008/06/identity/claims/role" claimValue="developer" />
<claim claimType="http://schemas.xmlsoap.org/claims/Group" claimValue="Administrator" />
</or>
</policy>
<policy resource="http://localhost:28491/Administrators.aspx" action="GET">
<and>
<claim claimType="http://schemas.xmlsoap.org/claims/Group" claimValue="Administrator" />
<claim claimType="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/country" claimValue="USA" />
</and>
</policy>
<policy resource="http://localhost:28491/Default.aspx" action="GET">
</policy>
<policy resource="http://localhost:28491/" action="GET">
</policy>
<policy resource="http://localhost:28491/Claims.aspx" action="GET">
</policy>
</claimsAuthorizationManager>
...
</identityConfiguration>
</system.identityModel>
備註
基底實作一律會傳 true
回 ,以授權存取。 您可以在衍生類別中覆寫此方法,以根據 RP 應用程式的需求來授權存取。 如果這個方法傳 false
回 ,Windows Identity Foundation (WIF) 傳回未經授權的錯誤給呼叫端,否則,執行會傳遞至 RP 應用程式。