ClaimsAuthorizationManager.CheckAccess(AuthorizationContext) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Při implementaci v odvozené třídě zkontroluje autorizaci předmětu v zadaném kontextu, aby provedl zadanou akci u zadaného prostředku.
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
Parametry
- context
- AuthorizationContext
Kontext autorizace, který obsahuje předmět, prostředek a akci, pro kterou se má autorizace kontrolovat.
Návraty
true
je-li subjekt oprávněn provést zadanou akci u zadaného prostředku; v opačném případě . false
Příklady
Příklady kódu používané v ClaimsAuthorizationManager tématech jsou převzaty z ukázky Claims Based Authorization
. Tato ukázka poskytuje vlastního správce autorizace deklarací identity, který může autorizovat subjekty na základě zásady zadané v konfiguraci. Vlastní správce autorizace deklarací identity se skládá ze tří základních komponent: třídy odvozené z ClaimsAuthorizationManager implementace správce, ResourceAction
třídy, která spáruje prostředek a akci, a čtenář zásad, který čte a kompiluje zásadu zadanou v konfiguračním souboru. Tuto kompilovanou zásadu pak může použít správce autorizace deklarací identity k vyhodnocení objektu zabezpečení za účelem autorizace přístupu k prostředkům. Ne všechny prvky se zobrazují kvůli stručnosti. Informace o této ukázce a dalších ukázkách dostupných pro WIF a o tom, kde je stáhnout, najdete v části Vzorový index kódu WIF.
Následující kód ukazuje přepsání CheckAccess metody. Tato metoda uděluje nebo zakazuje přístup na základě zásady čtení a kompilace z konfiguračního souboru.
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;
}
}
Následující kód ukazuje ResourceAction
třídu používanou vlastním správcem deklarací identity.
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;
}
}
}
Zásady používané správcem autorizace deklarací identity jsou určené vlastními <policy>
prvky v rámci elementu <claimsAuthorizationManager> . Tato zásada se čte a kompiluje metodou LoadCustomConfiguration . V první zásadě musí objekt zabezpečení mít jednu ze zadaných deklarací identity, aby mohl provést zadanou akci u zadaného prostředku. V druhé zásadě musí objekt zabezpečení obsahovat obě deklarace identity, aby bylo možné provést zadanou akci u zadaného prostředku. Ve všech ostatních je objekt zabezpečení automaticky udělen přístup bez ohledu na nároky, které má.
<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>
Poznámky
Základní implementace vždy vrátí true
, což autorizuje přístup. Tuto metodu můžete přepsat v odvozené třídě a autorizovat přístup na základě požadavků vaší aplikace RP. Pokud tato metoda vrátí false
, Windows Identity Foundation (WIF) vrátí volajícímu neautorizovanou chybu. Jinak se spuštění předá aplikaci RP.