Partager via


Tutoriel : Configurer une application web ASP.NET Core pour l’autorisation et l’authentification

S’applique à :Cercle vert avec un symbole de coche blanche. Locataires de main-d’œuvre Cercle vert avec un symbole de coche blanche. Locataires externes (en savoir plus)

Dans ce tutoriel, vous ajoutez les éléments d’authentification et d’autorisation à une application web core ASP.NET. Dans le tutoriel précédent, vous avez créé un projet ASP.NET Core et l’avez configuré pour l’authentification.

Dans ce tutoriel, vous allez :

  • Ajouter des éléments d’autorisation et d’authentification au code
  • Activer l’affichage des revendications dans un jeton d’ID
  • Ajouter les expériences de connexion et de déconnexion

Conditions préalables

Ajouter des éléments d’authentification et d’autorisation

Les fichiers HomeController.cs et Program.cs doivent être modifiés pour ajouter les éléments d’authentification et d’autorisation à l’application web ASP.NET Core. Cela inclut la gestion de la page d’accueil, l’ajout d’espaces de noms corrects et la configuration de la connexion.

Ajouter une autorisation à HomeController.cs

La page d’accueil de l’application doit avoir la possibilité d’autoriser l’utilisateur. L’espace Microsoft.AspNetCore.Authorization de noms fournit les classes et interfaces permettant d’implémenter l’autorisation pour l’application web. L’attribut [Authorize] est utilisé pour spécifier que seuls les utilisateurs authentifiés peuvent utiliser l’application web.

  1. Dans votre application web, ouvrez Controllers/HomeController.cs et ajoutez l’extrait de code suivant en haut du fichier :

    using System.Diagnostics;
    using Microsoft.AspNetCore.Authorization;
    using Microsoft.AspNetCore.Mvc;
    using dotnetcore_webapp.Models;
    
  2. Ajoutez l’attribut [Authorize] au-dessus de la HomeController définition de classe, comme indiqué dans l’extrait de code suivant :

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

Ajouter des éléments d’authentification et d’autorisation à Program.cs

Le fichier Program.cs est le point d’entrée de l’application et doit être modifié pour ajouter l’authentification et l’autorisation à l’application web. Les services doivent être ajoutés pour permettre à l’application d’utiliser les paramètres définis dans appsettings.json pour l’authentification.

  1. Ajoutez les espaces de nom suivants en haut du fichier.

    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. Ensuite, ajoutez le service d’authentification d’application web Microsoft Identity, qui configure l’application pour utiliser Microsoft Identity pour l’authentification.

    // 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. Ensuite, le middleware doit être configuré pour activer les fonctionnalités d’authentification. Remplacez le reste du code par l’extrait de code suivant.

    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();
    

Ajouter l’expérience de connexion et de déconnexion

L’interface utilisateur doit être mise à jour pour fournir une expérience plus conviviale pour la connexion et la déconnexion. Cette section montre comment créer un fichier qui affiche des éléments de navigation en fonction de l’état d’authentification de l’utilisateur. Le code lit les revendications des jetons d'ID pour vérifier que l’utilisateur est authentifié et utilise User.Claims pour extraire ces revendications.

  1. Créez un fichier dans Views/Shared et attribuez-lui le nom _LoginPartial.cshtml.

  2. Ouvrez le fichier et ajoutez le code suivant pour ajouter l’expérience de connexion et de déconnexion :

    @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. Ouvrez Views/Shared/_Layout.cshtml et ajoutez une référence à _LoginPartial créer à l’étape précédente. Placez ceci près de la fin de la navbar-nav classe, comme indiqué dans l’extrait de code suivant :

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

Utiliser un domaine d’URL personnalisé (facultatif)

S’applique à :Cercle blanc avec un symbole X gris. Locataires de main-d’œuvre Cercle vert avec un symbole de coche blanche. Locataires externes (en savoir plus)

Utilisez un domaine personnalisé pour personnaliser entièrement l’URL d’authentification. Du point de vue de l’utilisateur, les utilisateurs restent sur votre domaine pendant le processus d’authentification, au lieu d’être redirigés vers le nom de domaine ciamlogin.com .

Procédez comme suit pour utiliser un domaine personnalisé :

  1. Utilisez les étapes décrites dans Activer les domaines d’URL personnalisés pour les applications dans les locataires externes afin d’activer le domaine d’URL personnalisé pour votre locataire externe.

  2. Ouvrez appsettings.json fichier :

    1. Mettez à jour les paramètres Instance et TenantId en une propriété Authority.
    2. Ajoutez la chaîne suivante à la valeur Authority de https://Enter_the_Custom_Domain_Here/Enter_the_Tenant_ID_Here. Remplacez Enter_the_Custom_Domain_Here par votre domaine d’URL personnalisé et Enter_the_Tenant_ID_Here par votre ID de locataire. Si vous n’avez pas votre identifiant de locataire, apprenez comment consulter les détails de votre locataire.
    3. Ajoutez une knownAuthorities propriété avec une valeur [Enter_the_Custom_Domain_Here].

Après avoir apporté les modifications à votre fichier appsettings.json , si votre domaine d’URL personnalisé est login.contoso.com et que votre ID de locataire est aaaabbbb-0000-cccc-1111-dddd222eeee, votre fichier doit ressembler à l’extrait de code suivant :

{
  "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"]
    ...

Étape suivante