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 | — | ![]() |
![]() |
GA |
.NET | Microsoft.IdentityModel | Microsoft.IdentityModel | — | ![]() |
![]() |
GA |
ASP.NET Core | ASP.NET Core | Microsoft.AspNetCore.Authentication | Démarrage rapide | ![]() |
![]() |
GA |
ASP.NET Core | Microsoft.Identity.Web | Microsoft.Identity.Web | Démarrage rapide | ![]() |
![]() |
GA |
Java | MSAL4J | msal4j | Démarrage rapide | ![]() |
![]() |
GA |
Spring | spring-cloud-azure-starter-active-directory | spring-cloud-azure-starter-active-directory | Didacticiel | ![]() |
![]() |
GA |
Node.js | MSAL Node | msal-node | Démarrage rapide | ![]() |
![]() |
GA |
Python | MSAL Python | msal | ![]() |
![]() |
GA | |
Python | identity | identity | Démarrage rapide | ![]() |
![]() |
-- |
(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 Azurehttps://login.microsoftonline.us/
pour Azure – Gouvernement des États-Unishttps://login.microsoftonline.de/
pour Microsoft Entra Allemagnehttps://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 scolairecommon
pour connecter des utilisateurs avec un compte professionnel ou scolaire ou un compte personnel Microsoftconsumers
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.
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.Mettez à jour le code dans
ConfigureServices
afin qu’il utilise les méthodesAddMicrosoftIdentityWebApp
etAddMicrosoftIdentityUI
.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();
Dans la méthode
Configure
dans Startup.cs, activez l’authentification avec un appel àapp.UseAuthentication();
etapp.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 deAzureAd
.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 facultatifsubscribeToOpenIdConnectMiddlewareDiagnosticsEvents
surtrue
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 dansHttpContext.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
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de l’année 2024, nous abandonnerons progressivement le mécanisme de retour d’information GitHub Issues pour le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultez :Soumettre et afficher des commentaires pour