ClaimsAuthorizationManager.LoadCustomConfiguration(XmlNodeList) 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 přepsání v odvozené třídě načte vlastní konfiguraci z XML.
public:
virtual void LoadCustomConfiguration(System::Xml::XmlNodeList ^ nodelist);
public virtual void LoadCustomConfiguration (System.Xml.XmlNodeList nodelist);
abstract member LoadCustomConfiguration : System.Xml.XmlNodeList -> unit
override this.LoadCustomConfiguration : System.Xml.XmlNodeList -> unit
Public Overridable Sub LoadCustomConfiguration (nodelist As XmlNodeList)
Parametry
- nodelist
- XmlNodeList
Vlastní prvky konfigurace. Každý uzel v seznamu je typu XmlElement.
Implementuje
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í LoadCustomConfiguration metody. Tato metoda používá pomocnou třídu čtenáře zásad (nezobrazuje se) ke čtení a kompilaci zásad autorizace zadané v konfiguračním souboru. Zásady se přidají do slovníku a mají přístup ResourceAction
ke klíčovému objektu vytvořenému z prostředku a akce, pro kterou jsou určeny.
static Dictionary<ResourceAction, Func<ClaimsPrincipal, bool>> _policies = new Dictionary<ResourceAction, Func<ClaimsPrincipal, bool>>();
PolicyReader _policyReader = new PolicyReader();
/// <summary>
/// Overloads the base class method to load the custom policies from the config file
/// </summary>
/// <param name="nodelist">XmlNodeList containing the policy information read from the config file</param>
public override void LoadCustomConfiguration(XmlNodeList nodelist)
{
Expression<Func<ClaimsPrincipal, bool>> policyExpression;
foreach (XmlNode node in nodelist)
{
//
// Initialize the policy cache
//
XmlDictionaryReader rdr = XmlDictionaryReader.CreateDictionaryReader(new XmlTextReader(new StringReader(node.OuterXml)));
rdr.MoveToContent();
string resource = rdr.GetAttribute("resource");
string action = rdr.GetAttribute("action");
policyExpression = _policyReader.ReadPolicy(rdr);
//
// Compile the policy expression into a function
//
Func<ClaimsPrincipal, bool> policy = policyExpression.Compile();
//
// Insert the policy function into the policy cache
//
_policies[new ResourceAction(resource, action)] = policy;
}
}
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
Metoda LoadCustomConfiguration se volá pomocí infrastruktury konfigurace. Při volání nodelist
této metody bude obsahovat podřízené prvky nejvyšší úrovně elementu< claimsAuthorizationManager> z konfiguračního souboru. Každý z těchto prvků může zase obsahovat atributy nebo podřízené prvky v závislosti na schématu konfigurace, které definujete pro odvozenou třídu. Pokud se pod elementem v konfiguračním <claimsAuthorizationManager>
souboru nezobrazí žádné podřízené prvky, tato metoda se nevolá.
Výchozí implementace vyvolá NotImplementedExceptionchybu . Tuto metodu v odvozené třídě přepište, aby se povolila inicializace správce autorizace deklarací identity z konfiguračního souboru. Elementy konfigurace se obvykle používají k vyjádření zásad autorizace; Můžete ale definovat prvky a používat je jakýmkoli způsobem, který dává smysl na základě požadavků vaší aplikace.