Delen via


Procedure: Op rollen gebaseerde Access Control (RBAC) implementeren in een claimbewuste ASP.NET toepassing met behulp van WIF en ACS

Bijgewerkt: 19 juni 2015

Van toepassing op: Azure

Van toepassing op

  • Microsoft Azure Active Directory Access Control (ook wel Access Control Service of ACS genoemd)

  • ® Windows Identity Foundation (WIF)

  • ASP.NET

Samenvatting

In dit onderwerp wordt uitgelegd hoe u op rollen gebaseerde Access Control -autorisatie (RBAC) implementeert in claimbewuste ASP.NET webtoepassingen met behulp van WIF en ACS.

Inhoud

  • Doelen

  • Overzicht

  • Samenvatting van de stappen

  • Stap 1: een eenvoudige claimbewuste ASP.NET webtoepassing maken

  • Stap 2: Rolclaims configureren in ACS

  • Stap 3: rolcontroles implementeren in een ASP.NET-webtoepassing

  • Stap 4: een claimtransformatie implementeren met behulp van een Custom ClaimsAuthenticationManager

  • Stap 5: Uw werk testen

  • Verwante items

Doelen

  • Rolclaims configureren met ACS.

  • Rolclaims transformeren met behulp van de ClaimsAuthenticationManager.

  • Implementeer op rollen gebaseerd toegangsbeheercontroles met behulp van de Methode IsInRole en de PrinciaplPermission-kenmerken.

Overzicht

RBAC is een veelgebruikte benadering voor het beperken van de toegang in toepassingen. In ASP.NET webtoepassingen wordt deze aanpak geïmplementeerd met behulp van de Methode IsInRole, het kenmerk PrincipalPermission of de eisen die sinds ASP.NET 1.0 beschikbaar zijn. U kunt claims voor autorisatie gebruiken, waardoor goed vastgestelde procedures behouden blijven tijdens het gebruik van nieuwe technologieën, zoals WIF en ACS. U kunt de WIF-runtime en SDK hier downloaden:

Samenvatting van de stappen

  • Stap 1: een eenvoudige ASP.NET webtoepassing maken

  • Stap 2: Rolclaims configureren in ACS

  • Stap 3: rolcontroles implementeren in een ASP.NET-webtoepassing

  • Stap 4: een claimtransformatie implementeren met behulp van een Custom ClaimsAuthenticationManager

  • Stap 5: Uw werk testen

Stap 1: een eenvoudige ASP.NET webtoepassing maken

In deze stap ziet u hoe u een eenvoudige ASP.NET webtoepassing maakt die wordt gebruikt als basislijn voor het implementeren van RBAC.

Een eenvoudige ASP.NET-webtoepassing maken

  1. Startmenu Visual Studio met de optie Uitvoeren als administrator. Dit is vereist voor WIF.

  2. Maak een nieuwe ASP.NET Lege webtoepassing.

  3. Voeg het aspx-webformulier toe en geef het vervolgens een naam, bijvoorbeeld default.aspx.

Stap 2: Rolclaims configureren in acs

In deze stap ziet u hoe u rolclaims configureert in de ACS-beheerportal met behulp van regelgroepen. Raadpleeg procedure: Tokentransformatielogica implementeren met behulp van regels voor een volledige stapsgewijze procedure.

Rolclaims configureren in de ACS-beheerportal

  1. Schuif op de pagina Relying Party-toepassing bewerken omlaag naar de sectie Regelgroepen en klik vervolgens op de koppeling van de gewenste groep. Zorg ervoor dat deze is geselecteerd.

  2. Schuif op de pagina Regelgroep bewerken omlaag naar de sectie Regel en klik vervolgens op de koppeling Regel toevoegen .

  3. Schuif op de pagina Claimregel toevoegen omlaag naar de sectie Uitvoerclaimtype , klik op het keuzerondje Type selecteren en kies vervolgens het volgende claimtype.

    https://schemas.microsoft.com/ws/2008/06/identity/claims/role
    
  4. Klik in de sectie Uitvoerclaimwaarde op Waarde invoeren en voer de volgende tekst in als een waarde in het tekstvak:
    Gebruiker

  5. Voeg eventueel een beschrijving toe (aanbevolen) en klik vervolgens op Opslaan.

U hebt zojuist de gebruikersrolclaim geconfigureerd die aan elk token kan worden toegevoegd. Het scenario kan verschillen, afhankelijk van uw vereisten. Zie Instructies voor het implementeren van tokentransformatielogica met behulp van regels voor meer informatie over het configureren van complexere regels.

Stap 3: rolcontroles implementeren in een ASP.NET-webtoepassing

In deze stap ziet u hoe u RBAC implementeert.

RBAC implementeren op een ASP.NET webpagina

  1. Voeg een verwijzing toe naar de Microsoft.IdentityModel-assembly.

  2. Open de code achter default.aspx.cs.

  3. Voeg het volgende toe met behulp van declaraties.

    using System.Security.Permissions;
    using System.Threading;
    using Microsoft.IdentityModel.Claims;
    using System.Security;
    
  4. Verfraaid de Page_Load gebeurtenishandler met de volgende beveiligingsvraag. Met dit kenmerk wordt gecontroleerd of de huidige gebruiker de rol Gebruiker heeft. Zo niet, dan wordt er een uitzondering gegenereerd.

    [PrincipalPermission(SecurityAction.Demand, Role = "User")]
    
  5. Voeg de volgende code toe aan de hoofdtekst van Page_Load gebeurtenis-handler. Dit is precies hetzelfde als de vraag die in de code wordt uitgedrukt.

    PrincipalPermission p = new PrincipalPermission(null, "User");
       p.Demand();
    
  6. Voeg de volgende code toe aan de hoofdtekst van Page_Load gebeurtenis. In tegenstelling tot de vorige code genereert deze code geen uitzondering. In plaats daarvan retourneert IsInRole Booleaanse waarde die aangeeft of de huidige gebruiker de opgegeven rol heeft.

    if (!User.IsInRole("User"))
                    throw new SecurityException("Access is denied.");
    
  7. De voltooide code moet er ongeveer als volgt uitzien.

    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.");
            }
        }
    }
    

Stap 4: een claimtransformatie implementeren met behulp van een Custom ClaimsAuthenticationManager

Dit is een optionele taak. In deze stap ziet u hoe u claims transformeert met claimsAuthenticationManager, dat deel uitmaakt van de WIF-pijplijn die wordt uitgevoerd binnen de context van de ASP.NET-toepassing, in plaats van de claimtransformatieregels die worden uitgevoerd op ACS, zoals beschreven in stap 2: Rolclaims configureren in de ACS.

De claimtransformatie implementeren met behulp van een aangepaste ClaimsAuthenticationManager

  1. Voeg het klassebibliotheekproject toe aan de Visual Studio Solution en geef het vervolgens een naam, bijvoorbeeld MyClaimsTransformationModule.

  2. Voeg een verwijzing toe naar de Microsoft.IdentityModel-assembly .

  3. Voeg een verwijzing toe naar de System.IdentityModel-assembly .

  4. Maak een nieuwe klasse en geef deze een naam, bijvoorbeeld ClaimsTransformationModule.

  5. Voeg de volgende declaraties toe aan de klasse.

    using Microsoft.IdentityModel.Claims;
    using System.Security.Principal;
    
  6. De klasse afleiden van het type ClaimsAuthenticationManager .

  7. De verificatiemethode overschrijven (dit is waar claimtransformatie plaatsvindt). Uw code voor de verificatiemethode kan worden gebaseerd op het volgende.

    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. Schakel over naar de ASP.NET-toepassing en configureer uw aangepaste ClaimsAuthenticationManager in de web.config.

      <microsoft.identityModel>
        <service>
          <claimsAuthenticationManager type="MyClaimsTransformationModule.ClaimsTransformationModule, MyClaimsTransformationModule" />
    
  9. Zorg ervoor dat de nieuwe assembly die u hebt gemaakt, kan worden gevonden door de toepassing; de eenvoudigste manier is om deze in de bin-map van de toepassing te plaatsen.

Stap 5: Uw werk testen

In deze stap ziet u hoe u kunt controleren of de oplossing werkt. Druk op de knop F5 om uw oplossing te testen. Uw ASP.NET-webtoepassing moet worden uitgevoerd in de foutopsporingsmodus (u kunt onderbrekingspunten toevoegen om de uitvoering van de code binnen Visual Studio te controleren). Eerst gaat u naar de verificatiepagina van de id-provider die is geconfigureerd voor federatie. Nadat de verificatie is voltooid, moet u worden omgeleid naar de pagina Default.aspx zonder dat er een uitzondering wordt gegenereerd. Dit betekent dat aan alle beveiligingsvereisten voor de gebruikersrol is voldaan.