Dela via


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

  1. Starta Visual Studio med alternativet Kör som administratör. Detta krävs för WIF.

  2. Skapa ett nytt ASP.NET tomt webbprogram.

  3. 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

  1. 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.

  2. På sidan Redigera regelgrupp rullar du ned till avsnittet Regel och klickar sedan på länken Lägg till regel .

  3. 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
    
  4. I avsnittet Utdataanspråksvärde klickar du på Retur och anger sedan följande text som ett värde i textrutan:
    Användare

  5. Du 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

  1. Lägg till en referens till sammansättningen Microsoft.IdentityModel.

  2. Öppna koden bakom default.aspx.cs.

  3. Lägg till följande med hjälp av deklarationer.

    using System.Security.Permissions;
    using System.Threading;
    using Microsoft.IdentityModel.Claims;
    using System.Security;
    
  4. 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")]
    
  5. 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();
    
  6. 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.");
    
  7. 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

  1. Lägg till projektet Klassbibliotek i Visual Studio-lösningen och ge det sedan ett namn, till exempel MyClaimsTransformationModule.

  2. Lägg till en referens till sammansättningen Microsoft.IdentityModel .

  3. Lägg till en referens till sammansättningen System.IdentityModel .

  4. Skapa en ny klass och ge den ett namn, till exempel ClaimsTransformationModule.

  5. Lägg till följande deklarationer i klassen .

    using Microsoft.IdentityModel.Claims;
    using System.Security.Principal;
    
  6. Härled klassen från typen ClaimsAuthenticationManager .

  7. Å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;
    
  8. Växla till ASP.NET-programmet och konfigurera din anpassade ClaimsAuthenticationManager i dess web.config.

      <microsoft.identityModel>
        <service>
          <claimsAuthenticationManager type="MyClaimsTransformationModule.ClaimsTransformationModule, MyClaimsTransformationModule" />
    
  9. 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.