Partage via


Application web qui connecte les utilisateurs : Configuration de code

Cet article explique comment configurer le code de votre application web pour connecter les utilisateurs.

Bibliothèques Microsoft prenant en charge les applications web

Les bibliothèques Microsoft suivantes sont utilisées pour protéger une application web (et une API web) :

Langage/framework Projet sur
GitHub
Package Bien démarrer
démarré
Connexion des utilisateurs Accès aux API web Disponibilité générale ou
Préversion publique1
.NET MSAL.NET Microsoft.Identity.Client La bibliothèque ne peut pas demander des jetons d’ID pour la connexion de l’utilisateur. La bibliothèque peut demander des jetons d’accès pour les API web protégées. GA
.NET Microsoft.IdentityModel Microsoft.IdentityModel Library cannot request ID tokens for user sign-in.2 Library cannot request access tokens for protected web APIs.2 GA
ASP.NET Core ASP.NET Core Microsoft.AspNetCore.Authentication Démarrage rapide La bibliothèque peut demander des jetons d’ID pour la connexion de l’utilisateur. La bibliothèque ne peut pas demander des jetons d’accès pour les API web protégées. GA
ASP.NET Core Microsoft.Identity.Web Microsoft.Identity.Web Démarrage rapide La bibliothèque peut demander des jetons d’ID pour la connexion de l’utilisateur. La bibliothèque peut demander des jetons d’accès pour les API web protégées. GA
Java MSAL4J msal4j Démarrage rapide La bibliothèque peut demander des jetons d’ID pour la connexion de l’utilisateur. La bibliothèque peut demander des jetons d’accès pour les API web protégées. GA
Spring spring-cloud-azure-starter-active-directory spring-cloud-azure-starter-active-directory Didacticiel La bibliothèque peut demander des jetons d’ID pour la connexion de l’utilisateur. La bibliothèque peut demander des jetons d’accès pour les API web protégées. GA
Node.js MSAL Node msal-node Démarrage rapide La bibliothèque peut demander des jetons d’ID pour la connexion de l’utilisateur. La bibliothèque peut demander des jetons d’accès pour les API web protégées. GA
Python MSAL Python msal La bibliothèque peut demander des jetons d’ID pour la connexion de l’utilisateur. La bibliothèque peut demander des jetons d’accès pour les API web protégées. GA
Python identity identity Démarrage rapide La bibliothèque peut demander des jetons d’ID pour la connexion de l’utilisateur. La bibliothèque peut demander des jetons d’accès pour les API web protégées. --

(1) Les termes du contrat de licence universelle pour les services en ligne s’appliquent aux bibliothèques en préversion publique.

(2) La bibliothèque Microsoft.IdentityModelvalide uniquement les jetons. Elle ne peut pas demander de jetons d’ID ni de jetons d’accès.

Sélectionnez l’onglet correspondant à la plateforme qui vous intéresse :

Les extraits de code indiqués dans cet article et les suivants proviennent du tutoriel incrémentiel sur l’application web ASP.NET Core, chapitre 1.

Vous pouvez vous y référer pour obtenir tous les détails d’implémentation.

Fichiers de configuration

Les applications web qui connectent les utilisateurs à l’aide de la plateforme d’identités Microsoft sont généralement configurées via des fichiers config. Ces fichiers doivent spécifier les valeurs suivantes :

  • L’instance de cloud, si vous souhaitez par exemple que votre application s’exécute dans les clouds nationaux. Les différentes options sont les suivantes :
    • https://login.microsoftonline.com/ pour cloud public Azure
    • https://login.microsoftonline.us/ pour Azure – Gouvernement des États-Unis
    • https://login.microsoftonline.de/ pour Microsoft Entra Allemagne
    • https://login.partner.microsoftonline.cn/common pour Microsoft Entra Chine géré par 21Vianet
  • Le public dans l’ID de locataire. Les options varient selon que votre application est monolocataire ou multi-locataires.
    • Le GUID de locataire obtenu à partir du portail Azure. pour connecter des utilisateurs dans votre organisation Vous pouvez également utiliser un nom de domaine.
    • organizations pour connecter des utilisateurs dans n’importe quel compte professionnel ou scolaire
    • common pour connecter des utilisateurs avec un compte professionnel ou scolaire ou un compte personnel Microsoft
    • consumers pour connecter des utilisateurs avec un compte personnel Microsoft uniquement
  • L’ID client pour votre application, tel qu’il a été copié à partir du portail Azure.

Vous pouvez également voir des références à l’autorité, une concaténation des valeurs d’instance et d’ID de locataire.

Dans ASP.NET Core, ces paramètres se trouvent dans le fichier appsettings.json, dans la section « Microsoft Entra ID ».

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "TenantId": "[Enter the tenantId here]",

    // Client ID (application ID) obtained from the Azure portal
    "ClientId": "[Enter the Client Id here]",
    "CallbackPath": "/signin-oidc",
    "SignedOutCallbackPath": "/signout-oidc"
  }
}

Dans ASP.NET Core, il existe un autre fichier (properties\launchSettings.json) qui contient l’URL (applicationUrl) et le port TLS/SSL (sslPort) de votre application, ainsi que divers profils.

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:3110/",
      "sslPort": 44321
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "webApp": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://localhost:3110/"
    }
  }
}

Dans le portail Azure, les URI de redirection à inscrire sur la page Authentification de votre application doivent correspondre à ces URL. Pour les deux fichiers de configuration précédents, il s’agirait de https://localhost:44321/signin-oidc. Cela est dû au fait que applicationUrl est http://localhost:3110, mais sslPort est spécifié (44321). CallbackPath est /signin-oidc, comme défini dans appsettings.json.

De la même façon, l’URI de déconnexion devrait être défini sur https://localhost:44321/signout-oidc.

Notes

SignedOutCallbackPath doit être défini sur le portail ou l’application pour éviter tout conflit lors de la gestion de l’événement.

Code d’initialisation

Les différences de code d’initialisation dépendent de la plateforme. Pour ASP.NET Core et ASP.NET, la connexion des utilisateurs est déléguée à l’intergiciel (middleware) OpenID Connect. À l’heure actuelle, le modèle ASP.NET ou ASP.NET Core génère des applications web pour le point de terminaison Azure AD v1.0. Un peu de configuration est nécessaire pour les adapter à la plateforme d’identités Microsoft.

Dans les applications web ASP.NET Core (et les API web), l’application est protégée, car vous disposez d’un attribut Authorize sur les contrôleurs ou les actions des contrôleurs. Cet attribut vérifie que l’utilisateur est authentifié. Avant la publication de .NET 6, l’initialisation du code était dans le fichier Startup.cs. Les nouveaux projets ASP.NET Core avec .NET 6 ne contiennent plus de fichier Startup.cs. La prise de sa place est le fichier Program.cs. Le reste de ce didacticiel se rapporte à .NET 5 ou inférieur.

Notes

Si vous souhaitez démarrer directement avec les nouveaux modèles ASP.NET Core pour la plateforme d’identités Microsoft, qui tirent profit de Microsoft.Identity.Web, vous pouvez télécharger un package NuGet en préversion contenant des modèles de projet pour .NET 5.0. Une fois l’installation effectuée, vous pouvez instancier directement les applications web ASP.NET Core (MVC ou Blazor). Pour plus d’informations, consultez Modèles de projet d’application web Microsoft.Identity.Web. Il s’agit de l’approche la plus simple, car elle permet l’exécution de toutes les étapes suivantes à votre place.

Si vous préférez démarrer votre projet avec le projet web ASP.NET Core par défaut présent dans Visual Studio ou à l’aide de dotnet new mvc --auth SingleOrg ou dotnet new webapp --auth SingleOrg, vous verrez du code semblable à celui-ci :

 services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
         .AddAzureAD(options => Configuration.Bind("AzureAd", options));

Ce code utilise le package NuGet hérité Microsoft.AspNetCore.Authentication.AzureAD.UI qui est utilisé pour créer une application Azure Active Directory v1.0. Cet article explique comment créer une application de plateforme d’identités Microsoft v2.0 qui remplace ce code.

  1. Ajoutez les packages NuGet Microsoft.Identity.web et Microsoft.Identity.web.UI à votre projet. Supprimez le package NuGet Microsoft.AspNetCore.Authentication.AzureAD.UI, s’il est présent.

  2. Mettez à jour le code dans ConfigureServices afin qu’il utilise les méthodes AddMicrosoftIdentityWebApp et AddMicrosoftIdentityUI.

    public class Startup
    {
     ...
     // This method gets called by the runtime. Use this method to add services to the container.
     public void ConfigureServices(IServiceCollection services)
     {
      services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
             .AddMicrosoftIdentityWebApp(Configuration, "AzureAd");
    
      services.AddRazorPages().AddMvcOptions(options =>
      {
       var policy = new AuthorizationPolicyBuilder()
                     .RequireAuthenticatedUser()
                     .Build();
       options.Filters.Add(new AuthorizeFilter(policy));
      }).AddMicrosoftIdentityUI();
    
  3. Dans la méthode Configure dans Startup.cs, activez l’authentification avec un appel à app.UseAuthentication(); et app.MapControllers();.

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
     // more code here
     app.UseAuthentication();
     app.UseAuthorization();
    
     app.MapRazorPages();
     app.MapControllers();
     // more code here
    }
    

Dans ce code :

  • La méthode d’extension AddMicrosoftIdentityWebApp est définie dans Microsoft.Identity.Web, qui

    • Configure les options pour lire le fichier de configuration (ici à partir de la section « Microsoft Entra ID »)
    • Configure les options d’OpenID Connect afin que l’autorité soit la plateforme d’identités Microsoft.
    • Valide l’émetteur du jeton.
    • Garantit que les revendications correspondant au nom sont mappées à partir de la revendication preferred_username dans le jeton d’ID.
  • En plus de l’objet de configuration, vous pouvez spécifier le nom de la section de configuration lors de l’appel de AddMicrosoftIdentityWebApp. Par défaut, il s’agit de AzureAd.

  • AddMicrosoftIdentityWebApp a d’autres paramètres pour des scénarios avancés. Par exemple, le suivi des événements de l’intergiciel OpenId Connect peut vous aider à dépanner votre application web si l’authentification ne fonctionne pas. La définition du paramètre facultatif subscribeToOpenIdConnectMiddlewareDiagnosticsEvents sur true vous montrera comment les informations sont traitées par le jeu d’intergiciels d’ASP.NET Core lors de leur progression de la réponse HTTP à l’identité de l’utilisateur dans HttpContext.User.

  • La méthode d’extension AddMicrosoftIdentityUI est définie dans Microsoft.Identity.web.UI. Il fournit un contrôleur par défaut pour gérer la connexion et la déconnexion.

Pour plus d’informations sur la façon dont Microsoft.Identity.Web vous permet de créer des applications web, consultez Applications web dans microsoft-identity-web.

Étape suivante