Anvisningar: Implementera rollbaserad Access Control (RBAC) 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 Active Directory Access Control (kallas även Access Control Service eller ACS)
® Windows Identity Foundation (WIF)
ASP.NET
Sammanfattning
Det här avsnittet beskriver hur du implementerar RBAC-auktorisering (Rollbaserad Access Control) i anspråksmedvetna ASP.NET webbprogram med WIF och ACS.
Innehåll
Mål
Översikt
Sammanfattning av steg
Steg 1 – Skapa ett enkelt anspråksmedveten ASP.NET webbprogram
Steg 2 – Konfigurera rollanspråk i ACS
Steg 3 – Implementera rollkontroller i ett ASP.NET webbprogram
Steg 4 – Implementera en anspråkstransformering med hjälp av anpassade anspråkAuthenticationManager
Steg 5 – Testa ditt arbete
Relaterade objekt
Mål
Konfigurera rollanspråk med hjälp av ACS.
Transformera rollanspråk med hjälp av ClaimsAuthenticationManager.
Implementera rollbaserade åtkomstkontrollkontroller med hjälp av IsInRole-metoden och princiaplPermission-attributen.
Översikt
RBAC är en allmänt antagen metod för att begränsa åtkomsten i program. I ASP.NET webbprogram implementeras den här metoden med isInRole-metoden , attributet PrincipalPermission eller krav, som har varit tillgängliga sedan ASP.NET 1.0. Du kan använda anspråk för auktorisering, vilket bevarar väletablerade metoder samtidigt som du använder ny teknik, till exempel WIF och ACS. Du kan ladda ned WIF-körningen och SDK:et här:
Sammanfattning av steg
Steg 1 – Skapa ett enkelt anspråksmedveten ASP.NET webbprogram
Steg 2 – Konfigurera rollanspråk i ACS
Steg 3 – Implementera rollkontroller i ett ASP.NET webbprogram
Steg 4 – Implementera en anspråkstransformering med hjälp av anpassade anspråkAuthenticationManager
Steg 5 – Testa ditt arbete
Steg 1 – Skapa ett enkelt anspråksmedveten ASP.NET webbprogram
Det här steget visar hur du skapar en grundläggande ASP.NET webbapp som ska användas som baslinje för att implementera RBAC.
Skapa en enkel ASP.NET webbapp
Starta Visual Studio med alternativet Kör som administratör. Detta krävs för WIF.
Skapa ett nytt ASP.NET tomt webbprogram.
Lägg till webbformuläret aspx och ge det ett namn, till exempel default.aspx.
Steg 2 – Konfigurera rollanspråk i ACS
Det här steget visar hur du konfigurerar rollanspråk på ACS-hanteringsportalen med hjälp av regelgrupper. Se Anvisningar: Implementera logik för tokenomvandling med hjälp av regler för en fullständig stegvis genomgång.
Så här konfigurerar du rollanspråk på ACS-hanteringsportalen
På sidan Redigera program för förlitande part rullar du ned till avsnittet Regelgrupper och klickar sedan på länken för önskad grupp. Kontrollera att den är markerad.
På sidan Redigera regelgrupp rullar du ned till avsnittet Regel och klickar sedan på länken Lägg till regel .
På sidan Lägg till anspråksregel rullar du ned till avsnittet Utgående anspråkstyp , klickar på alternativknappen Välj typ och väljer sedan följande anspråkstyp.
https://schemas.microsoft.com/ws/2008/06/identity/claims/role
I avsnittet Utdataanspråksvärde klickar du på Retur och anger sedan följande text som ett värde i textrutan:
AnvändareDu kan också lägga till en beskrivning (rekommenderas) och sedan klicka på Spara.
Du har just konfigurerat anspråket användarroll som kan läggas till i valfri token. Scenariot kan variera beroende på dina behov. Mer information om hur du konfigurerar mer komplexa regler finns i Så här implementerar du logik för tokenomvandling med hjälp av regler.
Steg 3 – Implementera rollkontroller i ett ASP.NET webbprogram
Det här steget visar hur du implementerar RBAC.
Implementera RBAC på en ASP.NET webbsida
Lägg till en referens till sammansättningen Microsoft.IdentityModel.
Öppna koden bakom default.aspx.cs.
Lägg till följande med hjälp av deklarationer.
using System.Security.Permissions; using System.Threading; using Microsoft.IdentityModel.Claims; using System.Security;
Dekorera Page_Load händelsehanteraren med följande säkerhetsbehov. Det här attributet kontrollerar om den aktuella användaren har rollen Användare. Annars genereras ett undantag.
[PrincipalPermission(SecurityAction.Demand, Role = "User")]
Lägg till följande kod i brödtexten i Page_Load händelsehanterare. Detta är exakt samma som det krav som uttrycks i koden.
PrincipalPermission p = new PrincipalPermission(null, "User"); p.Demand();
Lägg till följande kod i brödtexten i Page_Load händelse. Till skillnad från föregående kod utlöser den här koden inte ett undantag. I stället returnerar IsInRole booleskt värde som anger om den aktuella användaren har den angivna rollen.
if (!User.IsInRole("User")) throw new SecurityException("Access is denied.");
Den färdiga koden bör se ut ungefär så här.
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Security.Permissions; using System.Threading; using Microsoft.IdentityModel.Claims; using System.Security; namespace WebIsInRoleACS { public partial class _default : System.Web.UI.Page { //THIS SHOULD THROW AN EXCEPTION [PrincipalPermission(SecurityAction.Demand, Role = "User")] protected void Page_Load(object sender, EventArgs e) { //THIS SHOULD THROW AN EXCEPTION PrincipalPermission p = new PrincipalPermission(null, "User"); p.Demand(); //THIS RETURNS BOOL if (!User.IsInRole("User")) throw new SecurityException("Access is denied."); } } }
Steg 4 – Implementera en anspråkstransformering med hjälp av anpassade anspråkAuthenticationManager
Detta är ett valfritt steg. Det här steget visar hur du transformerar anspråk med hjälp av ClaimsAuthenticationManager, som är en del av WIF-pipelinen som körs inom kontexten för ASP.NET-programmet, i motsats till reglerna för anspråksomvandling som körs på ACS enligt beskrivningen i Steg 2 – Konfigurera rollanspråk i ACS.
Implementera anspråkstransformering med hjälp av en anpassad ClaimsAuthenticationManager
Lägg till projektet Klassbibliotek i Visual Studio-lösningen och ge det sedan ett namn, till exempel MyClaimsTransformationModule.
Lägg till en referens till sammansättningen Microsoft.IdentityModel .
Lägg till en referens till sammansättningen System.IdentityModel .
Skapa en ny klass och ge den ett namn, till exempel ClaimsTransformationModule.
Lägg till följande deklarationer i klassen .
using Microsoft.IdentityModel.Claims; using System.Security.Principal;
Härled klassen från typen ClaimsAuthenticationManager .
Åsidosätt dess Authenticate-metod (det är här anspråkstransformering sker). Koden för metoden Authenticate kan baseras på följande.
if (incomingPrincipal != null && incomingPrincipal.Identity.IsAuthenticated == true) { //DECIDE ON SOME CRITERIA IF CURRENT USER DESERVES THE ROLE //IClaimsIdentity identity = (IClaimsIdentity)incomingPrincipal.Identity; ((IClaimsIdentity)incomingPrincipal.Identity).Claims.Add( new Claim(ClaimTypes.Role, "Admin")); } return incomingPrincipal;
Växla till ASP.NET-programmet och konfigurera din anpassade ClaimsAuthenticationManager i dess web.config.
<microsoft.identityModel> <service> <claimsAuthenticationManager type="MyClaimsTransformationModule.ClaimsTransformationModule, MyClaimsTransformationModule" />
Kontrollera att den nya sammansättningen som du skapade kan hittas av programmet. Det enklaste sättet är att placera den i programmets bin-mapp.
Steg 5 – Testa ditt arbete
Det här steget visar hur du verifierar att lösningen fungerar. Testa lösningen genom att trycka på F5- knappen. Din ASP.NET webbapp ska köras i felsökningsläge (du kan lägga till brytpunkter för att verifiera kodkörningen inom Visual Studio). Först bör du gå till autentiseringssidan för den identitetsprovider som har konfigurerats för federation. När autentiseringen har slutförts bör du omdirigeras tillbaka till sidan Default.aspx utan att ett undantag genereras, vilket innebär att alla säkerhetskrav för användarrollen uppfylldes.