ClaimsAuthorizationManager Třída
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í.
Definuje základní implementaci správce autorizace deklarací identity.
public ref class ClaimsAuthorizationManager : System::IdentityModel::Configuration::ICustomIdentityConfiguration
public class ClaimsAuthorizationManager : System.IdentityModel.Configuration.ICustomIdentityConfiguration
type ClaimsAuthorizationManager = class
interface ICustomIdentityConfiguration
Public Class ClaimsAuthorizationManager
Implements ICustomIdentityConfiguration
- Dědičnost
-
ClaimsAuthorizationManager
- 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 předměty na základě zásad zadaných v konfiguraci. Správce autorizace vlastních deklarací identity se skládá ze tří základních komponent: třídy odvozené od ClaimsAuthorizationManager toho, která implementuje správce, třídu, ResourceAction která spáruje prostředek a akci, a čtenář zásad, který čte a kompiluje zásady zadané v konfiguračním souboru. Tuto kompilovanou zásadu pak může správce autorizace deklarací použít k vyhodnocení objektu zabezpečení, aby mohl autorizovat přístup 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, které jsou k dispozici pro WIF a o tom, kde je stáhnout, najdete v části Index ukázek kódu WIF.
Následující kód ukazuje implementaci vlastního správce autorizace deklarací identity. Metoda LoadCustomConfiguration čte a zkompiluje zásadu z konfigurace pomocí pomocné třídy čtečky zásad (není zobrazena) a CheckAccess metoda uděluje nebo zakazuje přístup na základě této zásady.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Linq.Expressions;
using System.Security.Claims;
using System.Xml;
namespace ClaimsAuthorizationLibrary
{
/// <summary>
/// Simple ClaimsAuthorizationManager implementation that reads policy information from the .config file
/// </summary>
public class MyClaimsAuthorizationManager : ClaimsAuthorizationManager
{
static Dictionary<ResourceAction, Func<ClaimsPrincipal, bool>> _policies = new Dictionary<ResourceAction, Func<ClaimsPrincipal, bool>>();
PolicyReader _policyReader = new PolicyReader();
/// <summary>
/// Creates a new instance of the MyClaimsAuthorizationManager
/// </summary>
public MyClaimsAuthorizationManager()
{
}
/// <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;
}
}
/// <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;
}
}
}
Následující KÓD XML ukazuje, jak nakonfigurovat správce autorizace deklarací identity uvedené výše pro webovou aplikaci hostované ve službě IIS 7.5. Zobrazí se pouze prvky specifické pro konfiguraci správce autorizace deklarací identity. Všimněte si, že odkaz na ClaimsAuthorizationModule třídu musí být přidán do kanálu pod elementem <system.Webserver> . U webů a aplikací hostovaných ve verzích služby IIS před službou IIS 7 je možné moduly přidat do kanálu pod elementem <system.Web> . Tato konfigurace se zobrazí, ale zakomentuje se.
Zásady používané správcem autorizace deklarací identity jsou určeny vlastními <policy> prvky v rámci <claimsAuthorizationManager> elementu. 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. Ve druhé zásadě musí objekt zabezpečení obsahovat obě deklarace identity, aby bylo možné provést zadanou akci se zadaným prostředkem. Ve všech ostatních je objekt zabezpečení automaticky udělen přístup bez ohledu na nároky, které vlastní.
<configuration>
<configSections>
<!--WIF 4.5 sections -->
<section name="system.identityModel" type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
...
</configSections>
...
<system.web>
<httpModules>
<!--WIF 4.5 modules -->
<!--Not needed here for IIS >= 7 -->
<!--<add name="ClaimsAuthorizationModule" type="System.IdentityModel.Services.ClaimsAuthorizationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>-->
</httpModules>
</system.web>
...
<system.webServer>
<modules>
<!--WIF 4.5 modules -->
<add name="ClaimsAuthorizationModule" type="System.IdentityModel.Services.ClaimsAuthorizationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</modules>
</system.webServer>
...
<!-- WIF 4.5 s.im section-->
<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>
...
</configuration><configuration>
<configSections>
<!--WIF 4.5 sections -->
<section name="system.identityModel" type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
...
</configSections>
...
<system.web>
<httpModules>
<!--WIF 4.5 modules -->
<!--Not needed here for IIS >= 7 -->
<!--<add name="ClaimsAuthorizationModule" type="System.IdentityModel.Services.ClaimsAuthorizationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>-->
</httpModules>
</system.web>
...
<system.webServer>
<modules>
<!--WIF 4.5 modules -->
<add name="ClaimsAuthorizationModule" type="System.IdentityModel.Services.ClaimsAuthorizationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</modules>
</system.webServer>
...
<!-- WIF 4.5 s.im section-->
<system.identityModel>
<identityConfiguration>
<claimsAuthorizationManager type="MyClaimsAuthorizationManager.SimpleClaimsAuthorizationManager, MyClaimsAuthorizationManager" />
...
</system.identityModel>
...
</configuration>
Poznámky
Třída ClaimsAuthorizationManager poskytuje základní implementaci pro správce autorizace deklarací identity. Správce autorizace deklarací identity se dá použít v následujících dvou scénářích:
Ve webových aplikacích a službách je možné do kanálu zpracování přidat správce autorizace deklarací identity, který poskytuje bod rozšiřitelnosti, ze kterého můžete autorizovat přístup k prostředku podle hodnoty příchozích deklarací identity předtím, než se zavolá kód aplikace, který skutečně implementuje požadovaný prostředek.
Pokud použijete ClaimsPrincipalPermission třídu nebo ClaimsPrincipalPermissionAttribute třídu k provádění imperativních nebo deklarativních kontrol přístupu na základě deklarací v kódu, volá správce autorizace deklarací identity nakonfigurovaný pro vaši aplikaci, aby provedl kontrolu. Kontroly přístupu na základě deklarací identity je možné provádět jak ve webových aplikacích, tak v desktopových aplikacích.
Výchozí implementace poskytovaná ClaimsAuthorizationManager třídou autorizuje přístup pro každou zobrazenou deklaraci identity. Můžete však odvodit z této třídy a přepsat metodu CheckAccess tak, aby poskytovala vlastní autorizační logiku.
Použití správce autorizace deklarací identity je volitelné. Aplikaci můžete nakonfigurovat tak, aby používala správce autorizace deklarací identity prostřednictvím kódu programu pomocí IdentityConfiguration třídy nebo deklarativního určením elementu <claimsAuthorizationManager> , což je podřízený prvek <elementu identityConfiguration> v konfiguračním souboru aplikace. Pokud je vaše aplikace web nebo webová aplikace hostovaná v Internetové informační službě (IIS), musíte také přidat ClaimsAuthorizationModule v kolekci modulů HTTP ASP.NET.
Důležité
Pokud používáte ClaimsPrincipalPermission třídu nebo ClaimsPrincipalPermissionAttribute třídu, správce autorizace deklarací identity, který se používá k provedení kontroly přístupu, je ten, který je zadaný v konfiguraci identity v rámci FederatedAuthentication.FederationConfiguration vlastnosti. V konfiguračním souboru je <identityConfiguration> oddíl odkazovaný z výchozího <federationConfiguration> elementu. To platí i pro služby WCF (Windows Communication Foundation) a desktopové aplikace.
Základní ClaimsAuthorizationManager třída nepřebírají žádnou další konfiguraci, můžete však přepsat LoadCustomConfiguration v odvozených třídách, aby poskytovala inicializaci správce autorizace deklarací z podřízených prvků objektu <claimsAuthorizationElement>. Typickým scénářem je použití těchto podřízených prvků k určení zásad autorizace, které určují, které typy deklarací identity a hodnoty jsou potřeba k získání přístupu k jakému prostředku. Nejedná se o pevný požadavek, i když můžete definovat jakékoli použití a syntaxi pro vaši implementaci.
Konstruktory
| Name | Description |
|---|---|
| ClaimsAuthorizationManager() |
Inicializuje novou instanci ClaimsAuthorizationManager třídy. |
Metody
| Name | Description |
|---|---|
| CheckAccess(AuthorizationContext) |
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. |
| Equals(Object) |
Určuje, zda je zadaný objekt roven aktuálnímu objektu. (Zděděno od Object) |
| GetHashCode() |
Slouží jako výchozí funkce hash. (Zděděno od Object) |
| GetType() |
Získá Type aktuální instance. (Zděděno od Object) |
| LoadCustomConfiguration(XmlNodeList) |
Při přepsání v odvozené třídě načte vlastní konfiguraci z XML. |
| MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Object. (Zděděno od Object) |
| ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |