Postupy: Implementace autorizace deklarací identity v aplikaci pracující s deklaracemi ASP.NET pomocí WIF a ACS
Aktualizováno: 19. června 2015
Platí pro: Azure
Platí pro
Služba Microsoft® Azure™ Access Control (ACS)
® Windows Identity Foundation (WIF)
ASP.NET
Souhrn
Toto téma popisuje, jak implementovat autorizaci Access Control deklarací identity (CBAC) ve webových aplikacích pracujících s deklaracemi ASP.NET pomocí WIF a ACS.
Obsah
Cíle
Přehled
Přehled kroků
Krok 1 – Implementace knihovny deklarací identity
Krok 2 – Konfigurace aplikace ASP.NET pro použití knihovny pro autorizaci deklarací identity
Krok 3 – Konfigurace zásad autorizace
Související položky
Cíle
Externí autorizace logiky z aplikace.
Implementujte kontroly autorizace nad rolemi, což vede k podrobnější kontrole autorizace.
Poskytuje zásady řízené, deklarativní a autorizační správu.
Přehled
Autorizace deklarací identity je založená na použití informací, které se přenášejí v tokenu – deklarací identity. Autorizace deklarací identity je užitečná, pokud není dostatečná k tomu, aby rozhodnutí o autorizaci bylo založeno výhradně na rolích. Například ve finančních aplikacích může být stejná role udělena různým omezením převodu peněz mezi účty na základě tenanta a dalších atributů. Tyto atributy mohou být součástí deklarace identity spolu s rolí, a proto umožňují jemněji vyladěné rozhodnutí o autorizaci.
Přehled kroků
Krok 1 – Implementace knihovny deklarací identity
Krok 2 – Konfigurace aplikace ASP.NET pro použití knihovny pro autorizaci deklarací identity
Krok 3 – Konfigurace zásad autorizace
Krok 1 – Implementace knihovny deklarací identity
Tento krok ukazuje, jak vytvořit externí knihovnu tříd, která bude číst zásady přístupu z konfiguračního souboru a vynucovat kontroly přístupu. Následující ukázka ukazuje, jak implementovat knihovnu pro autorizaci deklarací identity, která provádí rozhodnutí o autorizaci na základě deklarace PSČ.
Implementace knihovny pro autorizaci deklarací identity
Ujistěte se, že používáte Visual Studio ® v režimu správce.
Klikněte pravým tlačítkem myši na požadované řešení v Průzkumník řešení, přidejte nový projekt knihovny tříd a dejte mu název, například MyClaimsAuthorizationManager.
Odstraňte výchozí třídu Class1.cs.
Přidejte novou třídu a pojmenujte ji, například ZipClaimsAuthorizationManager. Tím se implementuje autorizace na základě PSČ.
Přidejte odkaz na sestavení Microsoft.IdentityModel a system.Web .
Přidejte následující deklarace.
using System.IO; using System.Xml; using Microsoft.IdentityModel.Claims; using Microsoft.IdentityModel.Configuration;
Rozšiřte třídu ClaimsAuthorizationManager , přepíšete svou metodu AccessCheck a pak implementujte konstruktor do třídy ZipClaimsAuthorizationManager . Váš kód by měl vypadat podobně jako v následujícím příkladu.
namespace MyClaimsAuthorizationManager { class ZipClaimsAuthorizationManager : ClaimsAuthorizationManager { private static Dictionary<string, int> m_policies = new Dictionary<string, int>(); public ZipClaimsAuthorizationManager(object config) { XmlNodeList nodes = config as XmlNodeList; foreach (XmlNode node in nodes) { { //FIND ZIP CLAIM IN THE POLICY IN WEB.CONFIG AND GET ITS VALUE //ADD THE VALUE TO MODULE SCOPE m_policies XmlTextReader reader = new XmlTextReader(new StringReader(node.OuterXml)); reader.MoveToContent(); string resource = reader.GetAttribute("resource"); reader.Read(); string claimType = reader.GetAttribute("claimType"); if (claimType.CompareTo(ClaimTypes.PostalCode) == 0) { throw new ArgumentNullException("Zip Authorization is not specified in policy in web.config"); } int zip = -1; bool success = int.TryParse(reader.GetAttribute("Zip"),out zip); if (!success) { throw new ArgumentException("Specified Zip code is invalid - check your web.config"); } m_policies[resource] = zip; } } } public override bool CheckAccess(AuthorizationContext context) { //GET THE IDENTITY //FIND THE POSTALCODE CLAIM'S VALUE IN IT //COMPARE WITH THE POLICY int allowedZip = -1; int requestedZip = -1; Uri webPage = new Uri(context.Resource.First().Value); IClaimsPrincipal principal = (IClaimsPrincipal)HttpContext.Current.User; if (principal == null) { throw new InvalidOperationException("Principal is not populate in the context - check configuration"); } IClaimsIdentity identity = (IClaimsIdentity)principal.Identity; if (m_policies.ContainsKey(webPage.PathAndQuery)) { allowedZip = m_policies[webPage.PathAndQuery]; requestedZip = -1; int.TryParse((from c in identity.Claims where c.ClaimType == ClaimTypes.PostalCode select c.Value).FirstOrDefault(), out requestedZip); } if (requestedZip!=allowedZip) { return false; } return true; } } }
Zkompilujte řešení a ujistěte se, že nedošlo k žádným chybám kompilace.
Vyhledejte kompilovanou knihovnu, v tomto případě MyClaimsAuthorizationManager.dll. Bude nutné ho vyhodit do složky přihrádky webové aplikace ASP.NET.
Krok 2 – Konfigurace aplikace ASP.NET pro použití knihovny pro autorizaci deklarací identity
V ASP.NET webové aplikaci se provádějí další kroky. Nepřidávejte odkaz na knihovnu Správce autorizace deklarací identity, kterou jste vytvořili v předchozím kroku. Webová aplikace ASP.NET by o ní měla být "neznámá", s výjimkou web.config.
Konfigurace aplikace ASAP.NET tak, aby používala knihovnu deklarací identity
Nakonfigurujte webovou aplikaci ASP.NET tak, aby zahrnovala wify ClaimsAuthorizationModule v kanálu přidáním následující položky do oddílu HttpModules v web.config (platné pro vývojový webový server, který se dodává s Visual Studio; pro Internetová informační služba (IIS) verze 7, tato konfigurace by měla být umístěna v části modulů v uzlu system.webServer).
<add name="ClaimsAuthorizationModule" type="Microsoft.IdentityModel.Web.ClaimsAuthorizationModule, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
Nakonfigurujte ASP.NET webovou aplikaci tak, aby používala vlastní autorizační knihovnu, kterou jste implementovali v předchozím kroku, přidáním následující položky do uzlu microsoft.identityModel.service.
<claimsAuthorizationManager type="MyClaimsAuthorizationManager.ZipClaimsAuthorizationManager, MyClaimsAuthorizationManager" >
Krok 3 – Konfigurace zásad autorizace
V tomto tématu se zásady konfigurace vyjadřují v souboru web.config webové aplikace ASP.NET. Zásady mají jednoduchá pravidla, která mapuje prostředky na typ deklarace identity a její hodnotu. Například následující zásady je možné číst a vynucovat vlastní autorizační knihovnou, kterou jste vytvořili a nakonfigurovali v předchozích krocích. Přidejte následující položku do uzlu claimsAuthorizationManager, který jste nakonfigurovali v předchozím kroku.
<policy resource="/default.aspx">
<claim claimType=https://schemas.xmlsoap.org/ws/2005/05/identity/claims/postalcode
Zip="11111" />
</policy>
Výše uvedená zásada vyžaduje, aby příchozí token měl deklaraci zip s hodnotou 11111, aby bylo možné získat přístup ke stránce default.aspx.