Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Découvrez comment accéder à Microsoft Graph à partir d’une application web s’exécutant sur Azure App Service.
Vous souhaitez ajouter l’accès à Microsoft Graph à partir de votre application web et effectuer une action en tant qu’utilisateur connecté. Cette section explique comment accorder des autorisations déléguées à l'application web et obtenir les informations de profil de l'utilisateur connecté à partir de Microsoft Entra ID.
Dans ce tutoriel, vous allez apprendre à :
- Accorder des autorisations déléguées à une application web.
- Appelez Microsoft Graph à partir d’une application web pour un utilisateur connecté.
Si vous n'avez pas de compte Azure, créez un compte free avant de commencer.
Conditions préalables
- Une application web s’exécutant sur Azure App Service avec le module d’authentification/autorisation App Service activé.
Accorder l’accès front-end pour interagir avec Microsoft Graph
Après avoir activé l’authentification et l’autorisation sur votre application web, l’application web est inscrite auprès de la plateforme d’identités Microsoft et est soutenue par une application Microsoft Entra. Dans cette étape, vous accordez aux autorisations d’application web d’accéder à Microsoft Graph pour l’utilisateur.
Remarque
(Techniquement, vous allez accorder à l’application Azure AD de l’application web les autorisations nécessaires pour accéder à l’application Microsoft Entra pour le compte de l’utilisateur.)
Dans le Microsoft Entra admin center, sélectionnez Entra ID.
Sélectionnez App registrations>Applications possédées>Afficher toutes les applications de ce répertoire. Sélectionnez le nom de votre application web, puis Autorisations des API.
Sélectionnez Ajouter une autorisation, puis sélectionnez API Microsoft, puis Microsoft Graph.
Sélectionnez Autorisations déléguées, puis Utilisateur.Lecture dans la liste. Sélectionnez Ajouter des autorisations.
Configurer App Service pour renvoyer un jeton d’accès utilisable
L’application web dispose désormais des autorisations requises pour accéder à Microsoft Graph en tant qu’utilisateur connecté. Dans cette section, vous allez configurer l’authentification et l’autorisation App Service pour vous donner un jeton d’accès utilisable pour accéder à Microsoft Graph. Pour cette étape, vous devez ajouter l’étendue User.Read du service en aval (Microsoft Graph) : https://graph.microsoft.com/User.Read.
Important
Si vous ne configurez pas App Service pour retourner un jeton d'accès utilisable, vous recevez une erreur CompactToken parsing failed with error code: 80049217 lorsque vous appelez Microsoft Graph API dans votre code.
Accédez à Azure Explorateur de ressources et à l’aide de l’arborescence des ressources, recherchez votre application web. L’URL de ressource doit être similaire à https://management.azure.com/subscriptions/subscriptionId/resourceGroups/SecureWebApp/providers/Microsoft.Web/sites/SecureWebApp20200915115914.
L’explorateur de ressources Azure est maintenant ouvert avec votre application web sélectionnée dans l’arborescence des ressources.
En haut de la page, sélectionnez Edit pour activer la modification de vos ressources Azure.
Dans le navigateur de gauche, descendez dans la hiérarchie jusqu’à config>authsettingsV2.
Dans la vue authsettingsV2, sélectionnez Modifier.
Recherchez la section connexion de identityProviders>azureActiveDirectory et ajoutez les paramètres paramètresDeConnexion suivants :
"loginParameters":[ "response_type=code id_token","scope=openid offline_access profile https://graph.microsoft.com/User.Read" ]."identityProviders": { "azureActiveDirectory": { "enabled": true, "login": { "loginParameters":[ "response_type=code id_token", "scope=openid offline_access profile https://graph.microsoft.com/User.Read" ] } } } },Enregistrez vos paramètres en sélectionnant PUT.
La prise en compte de ce paramètre peut prendre plusieurs minutes. Votre application web est désormais configurée pour accéder à Microsoft Graph avec un jeton d’accès approprié. Si ce n'est pas le cas, Microsoft Graph retourne une erreur indiquant que le format du jeton compact est incorrect.
Appeler Microsoft Graph avec .NET
Votre application web dispose désormais des autorisations requises et ajoute également l'ID client de Microsoft Graph aux paramètres de connexion.
En utilisant la bibliothèque Microsoft.Identity.Web, l'application Web obtient un jeton d’accès pour l’authentification avec Microsoft Graph. Dans la version 1.2.0 et ultérieure, le Microsoft. Identity.Web library s’intègre et peut s’exécuter en même temps que le module d’authentification/autorisation App Service. Microsoft. Identity.Web détecte que l’application web est hébergée dans App Service et récupère automatiquement le jeton d’accès à partir de l’en-tête de requête X-MS-TOKEN-AAD-ACCESS-TOKEN injecté par App Service (voir Retrieve tokens in app code). Vous n’avez pas besoin d’accéder manuellement à cet en-tête dans votre code. Le jeton d’accès est ensuite transmis aux demandes authentifiées auprès de Microsoft Graph API.
Pour voir ce code dans un exemple d’application, consultez :
Remarque
La bibliothèque Microsoft.Identity.Web n'est pas requise dans votre application web pour l'authentification et l'autorisation de base ou pour authentifier les requêtes avec Microsoft Graph. Il est possible d’appeler de manière sécurisée les API en aval avec uniquement le module d’authentification/autorisation App Service activé.
Toutefois, l'authentification/autorisation App Service est conçue pour des scénarios d'authentification plus basiques. Pour les scénarios plus complexes (gestion des revendications personnalisées, par exemple), vous avez besoin de la bibliothèque Microsoft.Identity.Web ou Microsoft Authentication Library. Il y a un peu plus de préparation et de configuration au début, mais la bibliothèque Microsoft.Identity.Web peut fonctionner en parallèle avec le module d’authentification/autorisation App Service. Plus tard, lorsque votre application web doit gérer des scénarios plus complexes, vous pouvez désactiver le module d’authentification/autorisation App Service et Microsoft. Identity.Web fait déjà partie de votre application.
Installer des packages de bibliothèque de client
Installez le Microsoft. Identity.Web et Microsoft. Identity.Web.MicrosoftGraph packages NuGet dans votre projet à l’aide de l’interface de ligne de commande .NET Core ou de la console Package Manager dans Visual Studio.
ligne de commande .NET Core
Ouvrez une ligne de commande et basculez vers le répertoire qui contient votre fichier projet.
Exécutez les commandes d’installation.
dotnet add package Microsoft.Identity.Web.MicrosoftGraph
dotnet add package Microsoft.Identity.Web
Console du gestionnaire de packages
Ouvrez le projet/la solution dans Visual Studio, puis ouvrez la console à l’aide de la commande Tools>NuGet Package Manager>Package Manager Console.
Exécutez les commandes d’installation.
Install-Package Microsoft.Identity.Web.GraphServiceClient
Install-Package Microsoft.Identity.Web
Startup.cs
Dans le fichier Startup.cs, la méthode AddMicrosoftIdentityWebApp ajoute Microsoft. Identity.Web sur votre application web. La méthode AddMicrosoftGraph ajoute la prise en charge de Microsoft Graph. Pour plus d’informations sur la gestion du consentement incrémentiel et de l’accès conditionnel, lisez cet article.
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Identity.Web;
using Microsoft.AspNetCore.Authentication.OpenIdConnect;
// Some code omitted for brevity.
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.AddOptions();
string[] initialScopes = Configuration.GetValue<string>("DownstreamApi:Scopes")?.Split(' ');
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd"))
.EnableTokenAcquisitionToCallDownstreamApi(initialScopes)
.AddMicrosoftGraph(Configuration.GetSection("DownstreamApi"))
.AddInMemoryTokenCaches();
services.AddAuthorization(options =>
{
// By default, all incoming requests will be authorized according to the default policy
options.FallbackPolicy = options.DefaultPolicy;
});
services.AddRazorPages()
.AddMvcOptions(options => {})
.AddMicrosoftIdentityUI();
services.AddControllersWithViews()
.AddMicrosoftIdentityUI();
}
}
appsettings.json
AzureAd spécifie la configuration de la bibliothèque Microsoft.Identity.Web. Dans le Microsoft Entra admin center, sélectionnez Entra ID dans le menu du portail, puis sélectionnez App registrations. Sélectionnez l’inscription d’application créée lorsque vous avez activé le module d’authentification/autorisation App Service. (L’inscription d’application doit avoir le même nom que votre application web.) Vous trouverez l’ID de locataire et l’ID client dans la page de vue d’ensemble de l’inscription d’application. Le nom de domaine se trouve dans la page de vue d’ensemble Microsoft Entra de votre locataire.
Graph spécifie le point de terminaison Microsoft Graph et les étendues initiales nécessaires par l’application.
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "[Enter the domain of your tenant, e.g. contoso.onmicrosoft.com]",
"TenantId": "[Enter 'common', or 'organizations' or the Tenant Id (Obtained from the Microsoft Entra admin center. Select 'Endpoints' from the 'App registrations' blade and use the GUID in any of the URLs), e.g. da41245a5-11b3-996c-00a8-4d99re19f292]",
"ClientId": "[Enter the Client Id (Application ID obtained from the Microsoft Entra admin center), e.g. ba74781c2-53c2-442a-97c2-3d60re42f403]",
"ClientSecret": "[Copy the client secret added to the app from the Microsoft Entra admin center]",
"ClientCertificates": [
],
// the following is required to handle Continuous Access Evaluation challenges
"ClientCapabilities": [ "cp1" ],
"CallbackPath": "/signin-oidc"
},
"DownstreamApis": {
"MicrosoftGraph": {
// Specify BaseUrl if you want to use Microsoft graph in a national cloud.
// See https://learn.microsoft.com/graph/deployments#microsoft-graph-and-graph-explorer-service-root-endpoints
// "BaseUrl": "https://graph.microsoft.com/v1.0",
// Set RequestAppToken this to "true" if you want to request an application token (to call graph on
// behalf of the application). The scopes will then automatically
// be ['https://graph.microsoft.com/.default'].
// "RequestAppToken": false
// Set Scopes to request (unless you request an app token).
"Scopes": [ "User.Read" ]
// See https://aka.ms/ms-id-web/downstreamApiOptions for all the properties you can set.
}
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
Appeler Microsoft Graph pour le compte de l’utilisateur
L’exemple suivant montre comment appeler Microsoft Graph en tant qu’utilisateur connecté et obtenir des informations utilisateur. L'objet GraphServiceClient est injecté dans le contrôleur, et l'authentification a été configurée pour vous par la bibliothèque Microsoft.Identity.Web.
// Index.cshtml.cs
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Graph;
using System.IO;
using Microsoft.Identity.Web;
using Microsoft.Extensions.Logging;
// Some code omitted for brevity.
[AuthorizeForScopes(Scopes = new[] { "User.Read" })]
public class IndexModel : PageModel
{
private readonly ILogger<IndexModel> _logger;
private readonly GraphServiceClient _graphServiceClient;
public IndexModel(ILogger<IndexModel> logger, GraphServiceClient graphServiceClient)
{
_logger = logger;
_graphServiceClient = graphServiceClient;
}
public async Task OnGetAsync()
{
try
{
var user = await _graphServiceClient.Me.GetAsync();
ViewData["Me"] = user;
ViewData["name"] = user.DisplayName;
using (var photoStream = await _graphServiceClient.Me.Photo.Content.GetAsync())
{
byte[] photoByte = ((MemoryStream)photoStream).ToArray();
ViewData["photo"] = Convert.ToBase64String(photoByte);
}
}
catch (Exception ex)
{
ViewData["photo"] = null;
}
}
}
Nettoyer les ressources
Si vous avez effectué toutes les étapes de ce tutoriel en plusieurs parties, vous avez créé une instance App Service, un plan d’hébergement App Service et un compte de stockage dans un groupe de ressources. Vous avez également créé une inscription d’application dans Microsoft Entra ID. Si vous avez choisi une configuration externe, vous avez peut-être créé un locataire externe. Lorsque vous n’en avez plus besoin, supprimez ces ressources et l’inscription d’application afin de ne pas continuer à accumuler des frais.
Dans ce tutoriel, vous allez apprendre à :
- Supprimez les ressources Azure créées lors de la suite du didacticiel.
Supprimer le groupe de ressources
Dans le portail Azure, dans le menu du portail Azure, sélectionnez Groupes de ressources.
Sélectionnez le groupe de ressources qui contient votre App Service et le plan App Service.
Sélectionnez Supprimer le groupe de ressources pour supprimer le groupe de ressources et toutes les ressources.
Cette action peut prendre plusieurs minutes.
Supprimer l’inscription d’application
Dans le Microsoft Entra admin center, sélectionnez App registrations. Sélectionnez ensuite l’application que vous avez créée.
Dans la vue d’ensemble de l’inscription de l’application, sélectionnez Supprimer.
Supprimer le locataire externe
Si vous avez créé un locataire externe, vous pouvez le supprimer.
Dans le Centre d’administration Microsoft Entra, accédez à Entra ID>Overview>Manage tenants.
Sélectionnez le serveur que vous souhaitez supprimer, puis Supprimer.
Il est possible que vous deviez effectuer les actions requises avant de pouvoir supprimer le tenant. Par exemple, vous devrez peut-être supprimer tous les flux d’utilisateurs et les inscriptions d’applications dans le locataire.
Si vous êtes prêt à supprimer le tenant, sélectionnez Supprimer.
Étapes suivantes
Dans ce tutoriel, vous avez appris à :
- Accorder des autorisations déléguées à une application web.
- Appelez Microsoft Graph à partir d’une application web pour un utilisateur connecté.