Anvisningar: Implementera anspråksauktorisering i ett anspråksmedveten ASP.NET-program med WIF och ACS
Uppdaterad: 19 juni 2015
Gäller för: Azure
Gäller för
Microsoft® Azure™ Access Control Service (ACS)
® Windows Identity Foundation (WIF)
ASP.NET
Sammanfattning
Det här avsnittet beskriver hur du implementerar CBAC-auktorisering (Claims Based Access Control) i anspråksmedvetna ASP.NET webbprogram med WIF och ACS.
Innehåll
Mål
Översikt
Sammanfattning av steg
Steg 1 – Implementera ett bibliotek för anspråksauktorisering
Steg 2 – Konfigurera ett ASP.NET program för att använda biblioteket för anspråksauktorisering
Steg 3 – Konfigurera en auktoriseringsprincip
Relaterade objekt
Mål
Externalisera auktoriseringslogik från programmet.
Implementera auktoriseringskontroller utöver roller, vilket resulterar i en mer detaljerad kontroll över auktorisering.
Ange principdriven, deklarativ, auktoriseringshantering.
Översikt
Anspråksauktorisering baseras på användning av den information som finns i en token – anspråken. Anspråksauktorisering är användbart när det inte är tillräckligt att fatta auktoriseringsbeslutet baserat enbart på roller. I finansiella program kan till exempel samma roll ges till olika gränser för överföring av pengar mellan konton baserat på besittningsrätt och andra attribut. Sådana attribut kan komma i form av ett anspråk tillsammans med rollen och därmed möjliggöra ett mer finjusterat auktoriseringsbeslut.
Sammanfattning av steg
Steg 1 – Implementera ett bibliotek för anspråksauktorisering
Steg 2 – Konfigurera ett ASP.NET program för att använda biblioteket för anspråksauktorisering
Steg 3 – Konfigurera en auktoriseringsprincip
Steg 1 – Implementera ett bibliotek för anspråksauktorisering
Det här steget visar hur du skapar ett externt klassbibliotek som läser en åtkomstprincip från en konfigurationsfil och framtvingar åtkomstkontrollerna. Följande exempel visar hur du implementerar ett bibliotek för anspråksauktorisering som fattar ett auktoriseringsbeslut baserat på ett postnummeranspråk.
Så här implementerar du biblioteket för anspråksauktorisering
Kontrollera att du kör Visual Studio ® i administratörsläge.
Högerklicka på önskad lösning i Solution Explorer, lägg till ett nytt klassbiblioteksprojekt och ge det sedan ett namn, till exempel MyClaimsAuthorizationManager.
Ta bort standardklassen Class1.cs.
Lägg till en ny klass och ge den ett namn, till exempel ZipClaimsAuthorizationManager. Detta implementerar ett auktorisering baserat på postnummer.
Lägg till en referens till Microsoft.IdentityModel och system.Web-sammansättningarna .
Lägg till följande deklarationer.
using System.IO; using System.Xml; using Microsoft.IdentityModel.Claims; using Microsoft.IdentityModel.Configuration;
Utöka klassen ClaimsAuthorizationManager , åsidosätt dess AccessCheck-metod och implementera sedan en konstruktor till klassen ZipClaimsAuthorizationManager . Koden bör se ut ungefär så här.
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; } } }
Kompilera lösningen för att kontrollera att det inte finns några kompileringsfel.
Leta upp det kompilerade biblioteket, i det här fallet MyClaimsAuthorizationManager.dll. Den måste tas bort i mappen bin för ASP.NET-webbappen.
Steg 2 – Konfigurera ett ASP.NET program för att använda biblioteket för anspråksauktorisering
Nästa steg utförs i din ASP.NET webbapp. Lägg inte till en referens till ditt Claims Authorization Manager-bibliotek som du skapade i föregående steg. Din ASP.NET webbapp bör vara "omedveten" om den, förutom i web.config.
Så här konfigurerar du ett ASAP.NET program för att använda biblioteket för anspråksauktorisering
Konfigurera din ASP.NET webbapp så att den inkluderar WIFs ClaimsAuthorizationModule i pipelinen genom att lägga till följande post i avsnittet HttpModules i web.config (giltig för utvecklingswebbservern som levereras med Visual Studio. För Internet Information Services (IIS) version 7 bör den här konfigurationen finnas i modulavsnittet under noden system.webServer).
<add name="ClaimsAuthorizationModule" type="Microsoft.IdentityModel.Web.ClaimsAuthorizationModule, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
Konfigurera din ASP.NET webbapp så att den använder det anpassade auktoriseringsbiblioteket som du implementerade i föregående steg genom att lägga till följande post i noden microsoft.identityModel.service.
<claimsAuthorizationManager type="MyClaimsAuthorizationManager.ZipClaimsAuthorizationManager, MyClaimsAuthorizationManager" >
Steg 3 – Konfigurera en auktoriseringsprincip
I det här avsnittet uttrycks konfigurationsprincipen i ASP.NET webbappens web.config fil. Principen innehåller enkla regler som mappar resurser till anspråkstypen och dess värde. Följande princip kan till exempel läsas och framtvingas av det anpassade auktoriseringsbiblioteket som du skapade och konfigurerade i föregående steg. Lägg till följande post i noden claimsAuthorizationManager som du konfigurerade i föregående steg.
<policy resource="/default.aspx">
<claim claimType=https://schemas.xmlsoap.org/ws/2005/05/identity/claims/postalcode
Zip="11111" />
</policy>
Principen ovan kräver att en inkommande token måste ha ett zip-anspråk med värdet 11111 för att få åtkomst till sidan default.aspx.