Delen via


Zelfstudie: Een ASP.NET Core-web-app configureren voor autorisatie en verificatie

Van toepassing op:Groene cirkel met een wit vinkje.Werknemer-tenantsGroene cirkel met een wit vinkje.Externe tenants (meer informatie)

In deze zelfstudie voegt u de verificatie- en autorisatie-elementen toe aan een ASP.NET Core-web-app. In de vorige zelfstudiehebt u een ASP.NET Core-project gemaakt en geconfigureerd voor verificatie.

In deze handleiding:

  • Autorisatie- en verificatie-elementen toevoegen aan de code
  • Het inschakelen van de weergave van claims in een ID-token
  • De ervaringen voor aanmelden en afmelden toevoegen

Voorwaarden

Verificatie- en autorisatie-elementen toevoegen

De HomeController.cs- en Program.cs-bestanden moeten worden gewijzigd om de verificatie- en autorisatie-elementen toe te voegen aan de ASP.NET Core-web-app. Dit omvat het beheren van de startpagina, het toevoegen van de juiste naamruimten en het configureren van aanmelding.

Autorisatie toevoegen aan HomeController.cs

De startpagina van de toepassing moet de mogelijkheid hebben om de gebruiker te autoriseren. De Microsoft.AspNetCore.Authorization-naamruimte biedt de klassen en interfaces voor het implementeren van autorisatie voor de web-app. Het kenmerk [Authorize] wordt gebruikt om op te geven dat alleen geverifieerde gebruikers de web-app kunnen gebruiken.

  1. Open in uw web-app Controllers/HomeController.csen voeg het volgende codefragment toe aan de bovenkant van het bestand:

    using System.Diagnostics;
    using Microsoft.AspNetCore.Authorization;
    using Microsoft.AspNetCore.Mvc;
    using dotnetcore_webapp.Models;
    
  2. Voeg het kenmerk [Authorize] toe boven de HomeController klassedefinitie, zoals wordt weergegeven in het volgende fragment:

    [Authorize]
    public class HomeController : Controller
    {
    ...
    

Verificatie- en autorisatie-elementen toevoegen aan Program.cs

Het Program.cs-bestand is het toegangspunt van de toepassing en moet worden gewijzigd om verificatie en autorisatie toe te voegen aan de web-app. Services moeten worden toegevoegd zodat de app de instellingen kan gebruiken die zijn gedefinieerd in appsettings.json voor verificatie.

  1. Voeg de volgende naamruimten toe aan het begin van het bestand.

    using Microsoft.AspNetCore.Authentication.OpenIdConnect;
    using Microsoft.AspNetCore.Authorization;
    using Microsoft.AspNetCore.Mvc.Authorization;
    using Microsoft.Identity.Web;
    using Microsoft.Identity.Web.UI;
    using System.IdentityModel.Tokens.Jwt;
    
  2. Voeg vervolgens de verificatieservice microsoft Identity Web-app toe, waarmee de app wordt geconfigureerd voor het gebruik van Microsoft Identity voor verificatie.

    // Add services to the container.
    builder.Services.AddControllersWithViews();
    
    // This is required to be instantiated before the OpenIdConnectOptions starts getting configured.
    // By default, the claims mapping will map claim names in the old format to accommodate older SAML applications.
    // This flag ensures that the ClaimsIdentity claims collection will be built from the claims in the token
    JwtSecurityTokenHandler.DefaultMapInboundClaims = false;
    
    // Sign-in users with the Microsoft identity platform
    builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
        .AddMicrosoftIdentityWebApp(builder.Configuration)
        .EnableTokenAcquisitionToCallDownstreamApi()
        .AddInMemoryTokenCaches();
    
    builder.Services.AddControllersWithViews(options =>
    {
        var policy = new AuthorizationPolicyBuilder()
            .RequireAuthenticatedUser()
            .Build();
        options.Filters.Add(new AuthorizeFilter(policy));
    }).AddMicrosoftIdentityUI();
    
    
  3. Vervolgens moet de middleware worden geconfigureerd om de verificatiemogelijkheden in te schakelen. Vervang de rest van de code door het volgende codefragment.

    var app = builder.Build();
    
    // Configure the HTTP request pipeline.
    if (!app.Environment.IsDevelopment())
    {
        app.UseExceptionHandler("/Home/Error");
        // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
        app.UseHsts();
    }
    
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    
    app.UseRouting();
    app.UseAuthorization();
    
    app.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
    
    app.Run();
    

De aanmeldings- en afmeldingservaring toevoegen

De gebruikersinterface moet worden bijgewerkt om een gebruiksvriendelijkere ervaring te bieden voor aanmelden en afmelden. In deze sectie wordt beschreven hoe u een nieuw bestand maakt waarin navigatie-items worden weergegeven op basis van de verificatiestatus van de gebruiker. De code leest de id-tokenclaims om te controleren of de gebruiker is geverifieerd en gebruikt User.Claims om id-tokenclaims te extraheren.

  1. Maak een nieuw bestand in Pages/Shared en geef het de naam _LoginPartial.cshtml.

  2. Open het bestand en voeg de volgende code toe voor het toevoegen van de aanmeldings- en afmeldingservaring:

    @using System.Security.Principal
    
    <ul class="navbar-nav">
    @if (User.Identity is not null && User.Identity.IsAuthenticated)
    {
            <li class="nav-item">
                <span class="nav-link text-dark">Hello @User.Claims.First(c => c.Type == "preferred_username").Value!</span>
            </li>
            <li class="nav-item">
                <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignOut">Sign out</a>
            </li>
    }
    else
    {
            <li class="nav-item">
                <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignIn">Sign in</a>
            </li>
    }
    </ul>
    
  3. Open Pages/Shared/_Layout.cshtml en voeg een verwijzing toe naar _LoginPartial die u in de vorige stap hebt gemaakt. Plaats deze aan het einde van de navbar-nav-klasse, zoals wordt weergegeven in het volgende fragment:

    <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
        <ul class="navbar-nav flex-grow-1">
            <li class="nav-item">
                <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
            </li>
            <li class="nav-item">
                <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
            </li>
        </ul>
        <partial name="_LoginPartial" />
    </div>
    

Aangepast URL-domein gebruiken (optioneel)

Van toepassing op: Witte cirkel met een grijs X-symbool. Medewerkershuurders Groene cirkel met een wit vinkje. Externe huurders (meer informatie)

Gebruik een aangepast domein om de verificatie-URL volledig te merken. Vanuit gebruikersperspectief blijven gebruikers in uw domein tijdens het verificatieproces in plaats van omgeleid naar de ciamlogin.com domeinnaam.

Volg deze stappen om een aangepast domein te gebruiken:

  1. Gebruik de stappen in Aangepaste URL-domeinen inschakelen voor apps in externe tenants om aangepast URL-domein in te schakelen voor uw externe tenant.

  2. Openen appsettings.json bestand:

    1. Werk de parameters Instance en TenantId bij naar een eigenschap Authority.
    2. Voeg de volgende tekenreeks toe aan de Authority-waarde bij https://Enter_the_Custom_Domain_Here/Enter_the_Tenant_ID_Here. Vervang Enter_the_Custom_Domain_Here door uw aangepaste URL-domein en Enter_the_Tenant_ID_Here door uw tenant-id. Als u uw tenant-id niet hebt, leer hoe je je tenantgegevens kunt lezen.
    3. Voeg een eigenschap knownAuthorities toe met een waarde [Enter_the_Custom_Domain_Here].

Nadat u de wijzigingen in het appsettings.json-bestand hebt aangebracht, als uw aangepaste URL-domein is login.contoso.comen uw tenant-id is aaaabbbb-0000-cccc-1111-ddd2222eeeee-, moet uw bestand er ongeveer uitzien als het volgende fragment:

{
  "AzureAd": {
    "Authority": "https://login.contoso.com/aaaabbbb-0000-cccc-1111-dddd2222eeee",
    "ClientId": "Enter_the_Application_Id_Here",
    "ClientCertificates": [
      {
        "SourceType": "StoreWithThumbprint",
        "CertificateStorePath": "CurrentUser/My",
        "CertificateThumbprint": "AA11BB22CC33DD44EE55FF66AA77BB88CC99DD00"
      }   
    ],
    "CallbackPath": "/signin-oidc",
    "SignedOutCallbackPath": "/signout-callback-oidc",
    "KnownAuthorities": ["login.contoso.com"]
    ...

Volgende stap