Partager via


Activer les options d’authentification dans une application web à l’aide d’Azure AD B2C

Important

À compter du 1er mai 2025, Azure AD B2C ne sera plus disponible pour les nouveaux clients. Pour plus d’informations, consultez notre FAQ.

Cet article explique comment activer, personnaliser et améliorer l’expérience d’authentification Azure Active Directory B2C (Azure AD B2C) pour votre application web.

Avant de commencer, il est important de vous familiariser avec les articles suivants :

Utiliser un domaine personnalisé

En utilisant un domaine personnalisé, vous pouvez entièrement personnaliser l’URL d’authentification. Du point de vue de l’utilisateur, les utilisateurs restent sur votre domaine pendant le processus d’authentification, plutôt que d’être redirigés vers le nom de domaine Azure AD B2C b2clogin.com.

Pour supprimer toutes les références à « b2c » dans l’URL, vous pouvez également remplacer votre nom de locataire B2C, contoso.onmicrosoft.com, dans l’URL de demande d’authentification par votre GUID d’ID de locataire. Par exemple, vous pouvez passer https://fabrikamb2c.b2clogin.com/contoso.onmicrosoft.com/ à https://account.contosobank.co.uk/<tenant ID GUID>/.

Pour utiliser un domaine personnalisé et votre ID de locataire dans l’URL d’authentification, suivez les instructions de l’option Activer les domaines personnalisés. Dans le dossier racine du projet, ouvrez le fichier appsettings.json. Ce fichier contient des informations sur votre fournisseur d’identité Azure AD B2C.

Dans le fichier appsettings.json , procédez comme suit :

Le code JSON suivant montre les paramètres de l’application avant la modification :

"AzureAdB2C": {
  "Instance": "https://contoso.b2clogin.com",
  "Domain": "tenant-name.onmicrosoft.com",
  ...
}

Le code JSON suivant montre les paramètres de l’application après la modification :

"AzureAdB2C": {
  "Instance": "https://login.contoso.com",
  "Domain": "00000000-0000-0000-0000-000000000000",
  ...
}

Prendre en charge les scénarios avancés

La AddMicrosoftIdentityWebAppAuthentication méthode de l’API de plateforme d’identités Microsoft permet aux développeurs d’ajouter du code pour des scénarios d’authentification avancés ou de s’abonner à des événements OpenIdConnect. Par exemple, vous pouvez vous abonner à OnRedirectToIdentityProvider, ce qui vous permet de personnaliser la demande d’authentification envoyée par votre application à Azure AD B2C.

Pour prendre en charge les scénarios avancés, ouvrez le fichier Startup.cs et, dans la ConfigureServices fonction, remplacez AddMicrosoftIdentityWebAppAuthentication par l’extrait de code suivant :

// Configuration to sign-in users with Azure AD B2C

//services.AddMicrosoftIdentityWebAppAuthentication(Configuration, "AzureAdB2C");

services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
        .AddMicrosoftIdentityWebApp(options =>
{
    Configuration.Bind("AzureAdB2C", options);
    options.Events ??= new OpenIdConnectEvents();
    options.Events.OnRedirectToIdentityProvider += OnRedirectToIdentityProviderFunc;
});

Le code précédent ajoute l’événement OnRedirectToIdentityProvider avec une référence à la OnRedirectToIdentityProviderFunc méthode. Ajoutez l’extrait de code suivant à la Startup.cs classe.

private async Task OnRedirectToIdentityProviderFunc(RedirectContext context)
{
    // Custom code here
    
    // Don't remove this line
    await Task.CompletedTask.ConfigureAwait(false);
}

Vous pouvez passer des paramètres entre votre contrôleur et la fonction à l’aide OnRedirectToIdentityProvider de paramètres de contexte.

Préremplir le nom de connexion

Pendant un parcours utilisateur de connexion, votre application peut cibler un utilisateur spécifique. Lorsqu’une application cible un utilisateur, elle peut spécifier dans la demande d’autorisation le login_hint paramètre de requête avec le nom de connexion de l’utilisateur. Azure AD B2C remplit automatiquement le nom de connexion, et l’utilisateur doit fournir uniquement le mot de passe.

Pour préremplir le nom de connexion, procédez comme suit :

  1. Si vous utilisez une stratégie personnalisée, ajoutez la requête d’entrée requise comme décrit dans Configurer la connexion directe.

  2. Effectuez la procédure de prise en charge avancée des scénarios .

  3. Ajoutez la ligne de code suivante à la OnRedirectToIdentityProvider fonction :

    private async Task OnRedirectToIdentityProviderFunc(RedirectContext context)
    {
      context.ProtocolMessage.LoginHint = "emily@contoso.com";
    
      // More code
      await Task.CompletedTask.ConfigureAwait(false);
    }
    

Préélectionner un fournisseur d’identité

Si vous avez configuré le parcours de connexion de votre application pour inclure des comptes sociaux, tels que Facebook, LinkedIn ou Google, vous pouvez spécifier le domain_hint paramètre. Ce paramètre de requête fournit un indicateur à Azure AD B2C sur le fournisseur d’identité sociale qui doit être utilisé pour la connexion. Par exemple, si l’application spécifie domain_hint=facebook.com, le flux de connexion passe directement à la page de connexion Facebook.

Pour rediriger les utilisateurs vers un fournisseur d’identité externe, procédez comme suit :

  1. Vérifiez le nom de domaine de votre fournisseur d’identité externe. Pour plus d’informations, consultez Redirection de la connexion à un fournisseur de réseaux sociaux.

  2. Effectuez la procédure de prise en charge avancée des scénarios .

  3. Dans la OnRedirectToIdentityProviderFunc fonction, ajoutez la ligne de code suivante à la OnRedirectToIdentityProvider fonction :

    private async Task OnRedirectToIdentityProviderFunc(RedirectContext context)
    {
      context.ProtocolMessage.DomainHint = "facebook.com";
    
      // More code
      await Task.CompletedTask.ConfigureAwait(false);
    }
    

Spécifier la langue de l’interface utilisateur

La personnalisation de la langue dans Azure AD B2C permet à votre flux utilisateur de prendre en charge diverses langues en fonction des besoins de vos clients. Pour plus d’informations, consultez Personnalisation de la langue.

Pour définir la langue par défaut, procédez comme suit :

  1. Configurez la personnalisation de la langue.

  2. Effectuez la procédure de prise en charge avancée des scénarios .

  3. Ajoutez la ligne de code suivante à la OnRedirectToIdentityProvider fonction :

    private async Task OnRedirectToIdentityProviderFunc(RedirectContext context)
    {
      context.ProtocolMessage.UiLocales = "es";
    
      // More code
      await Task.CompletedTask.ConfigureAwait(false);
    }
    

Passer un paramètre de chaîne de requête personnalisé

Avec des stratégies personnalisées, vous pouvez passer un paramètre de chaîne de requête personnalisé. Un bon exemple de cas d’usage consiste à modifier dynamiquement le contenu de la page.

Pour passer un paramètre de chaîne de requête personnalisé, procédez comme suit :

  1. Configurez l’élément ContentDefinitionParameters .

  2. Effectuez la procédure de prise en charge avancée des scénarios .

  3. Ajoutez la ligne de code suivante à la OnRedirectToIdentityProvider fonction :

    private async Task OnRedirectToIdentityProviderFunc(RedirectContext context)
    {
      context.ProtocolMessage.Parameters.Add("campaignId", "123");
    
      // More code
      await Task.CompletedTask.ConfigureAwait(false);
    }
    

Transmission d’indicateur de jeton d’ID

Une application de partie de confiance peut envoyer un jeton web JSON entrant (JWT) dans le cadre de la demande d’autorisation OAuth2. Le jeton entrant est un indicateur de l’utilisateur ou de la demande d’autorisation. Azure AD B2C valide le jeton, puis extrait la revendication.

Pour inclure un indicateur de jeton d’ID dans la demande d’authentification, procédez comme suit :

  1. Effectuez la procédure de prise en charge avancée des scénarios .

  2. Dans votre stratégie personnalisée, définissez un indicateur de jeton d’ID de profil technique.

  3. Ajoutez la ligne de code suivante à la OnRedirectToIdentityProvider fonction :

    private async Task OnRedirectToIdentityProviderFunc(RedirectContext context)
    {
      // The idTokenHint variable holds your ID token 
      context.ProtocolMessage.IdTokenHint = idTokenHint
    
      // More code
      await Task.CompletedTask.ConfigureAwait(false);
    }
    

Contrôleur de compte

Si vous souhaitez personnaliser les actions SignIn, SignUp ou SignOut , nous vous encourageons à créer votre propre contrôleur. Le fait d’avoir votre propre contrôleur vous permet de passer des paramètres entre votre contrôleur et la bibliothèque d’authentification. AccountController fait partie du Microsoft.Identity.Web.UI package NuGet, qui gère les actions de connexion et de déconnexion. Vous trouverez son implémentation dans la bibliothèque Web Microsoft Identity.

Ajouter le contrôleur de compte

Dans votre projet Visual Studio, cliquez avec le bouton droit sur le dossier Contrôleurs , puis ajoutez un nouveau contrôleur. Sélectionnez MVC - Contrôleur vide, puis indiquez le nom MyAccountController.cs.

L’extrait de code suivant illustre un code personnalisé MyAccountController avec l’action SignIn .

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;


namespace mywebapp.Controllers
{
    [AllowAnonymous]
    [Area("MicrosoftIdentity")]
    [Route("[area]/[controller]/[action]")]
    public class MyAccountController : Controller
    {

        [HttpGet("{scheme?}")]
        public IActionResult SignIn([FromRoute] string scheme)
        {
            scheme ??= OpenIdConnectDefaults.AuthenticationScheme;
            var redirectUrl = Url.Content("~/");
            var properties = new AuthenticationProperties { RedirectUri = redirectUrl };
            return Challenge(properties, scheme);
        }

    }
}

Dans la vue _LoginPartial.cshtml , modifiez le lien de connexion à votre contrôleur.

<form method="get" asp-area="MicrosoftIdentity" asp-controller="MyAccount" asp-action="SignIn">

Passer l’ID de stratégie Azure AD B2C

L’extrait de code suivant illustre une action personnalisée MyAccountController avec l’action SignIn et SignUp . L’action transmet un paramètre nommé policy à la bibliothèque d’authentification. Cela vous permet de fournir l’ID de stratégie Azure AD B2C correct pour l’action spécifique.

public IActionResult SignIn([FromRoute] string scheme)
{
    scheme ??= OpenIdConnectDefaults.AuthenticationScheme;
    var redirectUrl = Url.Content("~/");
    var properties = new AuthenticationProperties { RedirectUri = redirectUrl };
    properties.Items["policy"] = "B2C_1_SignIn";
    return Challenge(properties, scheme);
}

public IActionResult SignUp([FromRoute] string scheme)
{
    scheme ??= OpenIdConnectDefaults.AuthenticationScheme;
    var redirectUrl = Url.Content("~/");
    var properties = new AuthenticationProperties { RedirectUri = redirectUrl };
    properties.Items["policy"] = "B2C_1_SignUp";
    return Challenge(properties, scheme);
}

Dans la vue _LoginPartial.cshtml , remplacez la asp-controller valeur MyAccountController par les autres liens d’authentification, tels que l’inscription ou la modification du profil.

Passer des paramètres personnalisés

L’extrait de code suivant illustre un code personnalisé MyAccountController avec l’action SignIn . L’action transmet un paramètre nommé campaign_id à la bibliothèque d’authentification.

public IActionResult SignIn([FromRoute] string scheme)
{
    scheme ??= OpenIdConnectDefaults.AuthenticationScheme;
    var redirectUrl = Url.Content("~/");
    var properties = new AuthenticationProperties { RedirectUri = redirectUrl };
    properties.Items["policy"] = "B2C_1_SignIn";
    properties.Items["campaign_id"] = "1234";
    return Challenge(properties, scheme);
}

Effectuez la procédure de prise en charge avancée des scénarios , puis, dans la OnRedirectToIdentityProvider méthode, lisez le paramètre personnalisé :

private async Task OnRedirectToIdentityProviderFunc(RedirectContext context)
{
    // Read the custom parameter
    var campaign_id = context.Properties.Items.FirstOrDefault(x => x.Key == "campaign_id").Value;

    // Add your custom code here
    if (campaign_id != null)
    {
        // Send parameter to authentication request
        context.ProtocolMessage.SetParameter("campaign_id", campaign_id);
    }
    
    await Task.CompletedTask.ConfigureAwait(false);
}

Sécuriser votre redirection de déconnexion

Après la déconnexion, l’utilisateur est redirigé vers l’URI spécifié dans le post_logout_redirect_uri paramètre, quelles que soient les URL de réponse spécifiées pour l’application. Toutefois, si une valeur valide id_token_hint est passée et que le jeton d’ID requis dans les demandes de déconnexion est activé, Azure AD B2C vérifie que la valeur correspond post_logout_redirect_uri à l’une des URI de redirection configurés de l’application avant d’effectuer la redirection. Si aucune URL de réponse correspondante n’a été configurée pour l’application, un message d’erreur s’affiche et l’utilisateur n’est pas redirigé.

Pour prendre en charge une redirection de déconnexion sécurisée dans votre application, suivez d’abord les étapes décrites dans les sections Contrôleur de compte et Scénarios avancés de support . Suivez ensuite les étapes ci-dessous :

  1. Dans MyAccountController.cs le contrôleur, ajoutez une action SignOut à l’aide de l’extrait de code suivant :

    [HttpGet("{scheme?}")]
    public async Task<IActionResult> SignOutAsync([FromRoute] string scheme)
    {
        scheme ??= OpenIdConnectDefaults.AuthenticationScheme;
    
        //obtain the id_token
        var idToken = await HttpContext.GetTokenAsync("id_token");
        //send the id_token value to the authentication middleware
        properties.Items["id_token_hint"] = idToken;            
    
        return SignOut(properties,CookieAuthenticationDefaults.AuthenticationScheme,scheme);
    }
    
  2. Dans la classe Startup.cs , analysez la id_token_hint valeur et ajoutez la valeur à la demande d’authentification. L’extrait de code suivant montre comment transmettre la id_token_hint valeur à la demande d’authentification :

    private async Task OnRedirectToIdentityProviderForSignOutFunc(RedirectContext context)
    {
        var id_token_hint = context.Properties.Items.FirstOrDefault(x => x.Key == "id_token_hint").Value;
        if (id_token_hint != null)
        {
            // Send parameter to authentication request
            context.ProtocolMessage.SetParameter("id_token_hint", id_token_hint);
        }
    
        await Task.CompletedTask.ConfigureAwait(false);
    }
    
  3. Dans la ConfigureServices fonction, ajoutez l’option SaveTokenspour les contrôleurs ayant accès à la id_token valeur :

    services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
        .AddMicrosoftIdentityWebApp(options =>
        {
            Configuration.Bind("AzureAdB2C", options);
            options.Events ??= new OpenIdConnectEvents();        
            options.Events.OnRedirectToIdentityProviderForSignOut += OnRedirectToIdentityProviderForSignOutFunc;
            options.SaveTokens = true;
        });
    
  4. Dans le fichier de configurationappsettings.json , ajoutez votre chemin d’URI de redirection de déconnexion à SignedOutCallbackPath la clé.

    "AzureAdB2C": {
      "Instance": "https://<your-tenant-name>.b2clogin.com",
      "ClientId": "<web-app-application-id>",
      "Domain": "<your-b2c-domain>",
      "SignedOutCallbackPath": "/signout/<your-sign-up-in-policy>",
      "SignUpSignInPolicyId": "<your-sign-up-in-policy>"
    }
    

Dans l’exemple ci-dessus, le post_logout_redirect_uri passé dans la demande de déconnexion sera au format suivant : https://your-app.com/signout/<your-sign-up-in-policy>. Cette URL doit être ajoutée à l’URL de réponse de l’inscription de l’application.

Contrôle d’accès basé sur les rôles

Avec l’autorisation dans ASP.NET Core , vous pouvez vérifier si les utilisateurs sont autorisés à accéder à une ressource protégée à l’aide de l’une des méthodes suivantes :

Dans la ConfigureServices méthode, ajoutez la AddAuthorization méthode, qui ajoute le modèle d’autorisation. L’exemple suivant crée une stratégie nommée EmployeeOnly. La stratégie vérifie qu’une revendication EmployeeNumber existe. La valeur de la revendication doit être l’un des ID suivants : 1, 2, 3, 4 ou 5.

services.AddAuthorization(options =>
    {
        options.AddPolicy("EmployeeOnly", policy =>
              policy.RequireClaim("EmployeeNumber", "1", "2", "3", "4", "5"));
    });

Vous contrôlez l’autorisation dans ASP.NET Core à l’aide d’AuthorizeAttribute et de ses différents paramètres. Dans sa forme la plus simple, l’application de l’attribut à un contrôleur, une action ou une page Razor limite l’accès Authorize aux utilisateurs authentifiés de ce composant.

Vous appliquez des stratégies aux contrôleurs à l’aide de l’attribut Authorize avec le nom de la stratégie. Le code suivant limite l’accès à l’action Claims aux utilisateurs autorisés par la EmployeeOnly stratégie :

[Authorize(Policy = "EmployeeOnly")]
public IActionResult Claims()
{
    return View();
}

Étapes suivantes