Accéder à Microsoft Graph à partir d’une application sécurisée en tant qu’application
Découvrez comment accéder à Microsoft Graph à partir d’une application web s’exécutant sur Azure App Service.
Vous souhaitez appeler Microsoft Graph pour le compte de l’application web. Un moyen sûr d’accorder à votre application web l’accès aux données consiste à utiliser une identité managée affectée par le système. Une identité managée de Microsoft Entra ID permet à App Service d’accéder aux ressources par le biais du contrôle d’accès en fonction du rôle (RBAC) sans demander d’informations d’identification d’application. Après avoir affecté une identité managée à votre application web, Azure s’occupe de la création et de la distribution d’un certificat. Vous n’avez pas à vous soucier de la gestion des secrets ou des informations d’identification d’application.
Dans ce tutoriel, vous allez apprendre à :
- Créer une identité managée affectée par le système sur une application web.
- Ajouter des autorisations d’API Microsoft Graph à une identité managée.
- Appeler Microsoft Graph à partir d’une application web à l’aide d’identités managées.
Si vous n’avez pas d’abonnement Azure, créez un compte gratuit Azure avant de commencer.
Prérequis
- Une application web s’exécutant sur Azure App Service et pour laquelle le module d’authentification/autorisation App Service est activé
Activer une identité managée sur l’application
Si vous créez et publiez votre application web à l’aide de Visual Studio, l’identité managée a été activée pour vous sur votre application. Dans votre service d’application, sélectionnez Identité dans le volet gauche, puis Affectée par le système. Vérifiez qu’État a la valeur Activé. Si ce n’est pas le cas, sélectionnez Enregistrer, puis Oui pour activer l’identité managée affectée par le système. Lorsque l’identité managée est activée, l’état prend la valeur Activé et l’ID d’objet est disponible.
Notez la valeur de l’ID d’objet, dont vous aurez besoin à l’étape suivante.
Accorder l’accès à Microsoft Graph
Lors de l’accès à Microsoft Graph, l’identité managée doit disposer des autorisations appropriées pour l’opération qu’elle souhaite effectuer. Actuellement, il n'existe aucune option permettant d'attribuer de telles autorisations via le centre d'administration Microsoft Entra. Le script suivant ajoute les autorisations d’API Microsoft Graph demandées à l’objet de principal de service d’identité managée.
# Install the module.
# Install-Module Microsoft.Graph -Scope CurrentUser
# The tenant ID
$TenantId = "aaaabbbb-0000-cccc-1111-dddd2222eeee"
# The name of your web app, which has a managed identity.
$webAppName = "SecureWebApp-20201106120003"
$resourceGroupName = "SecureWebApp-20201106120003ResourceGroup"
# The name of the app role that the managed identity should be assigned to.
$appRoleName = "User.Read.All"
# Get the web app's managed identity's object ID.
Connect-AzAccount -Tenant $TenantId
$managedIdentityObjectId = (Get-AzWebApp -ResourceGroupName $resourceGroupName -Name $webAppName).identity.principalid
Connect-MgGraph -TenantId $TenantId -Scopes 'Application.Read.All','AppRoleAssignment.ReadWrite.All'
# Get Microsoft Graph app's service principal and app role.
$serverApplicationName = "Microsoft Graph"
$serverServicePrincipal = (Get-MgServicePrincipal -Filter "DisplayName eq '$serverApplicationName'")
$serverServicePrincipalObjectId = $serverServicePrincipal.Id
$appRoleId = ($serverServicePrincipal.AppRoles | Where-Object {$_.Value -eq $appRoleName }).Id
# Assign the managed identity access to the app role.
New-MgServicePrincipalAppRoleAssignment `
-ServicePrincipalId $managedIdentityObjectId `
-PrincipalId $managedIdentityObjectId `
-ResourceId $serverServicePrincipalObjectId `
-AppRoleId $appRoleId
Après avoir exécuté le script, vous pouvez vérifier dans le centre d'administration Microsoft Entra que les autorisations API demandées sont attribuées à l'identité managée.
Accédez à Applications, puis sélectionnez Applications d'entreprise. Ce volet affiche tous les principaux de service de votre locataire. Ajoutez un filtre pour « Type d’application == Identités gérées » et sélectionnez le principal de service pour l’identité gérée.
Si vous suivez ce tutoriel, il existe deux principaux de service avec le même nom d’affichage (par exemple, SecureWebApp2020094113531). Le principal de service qui a une URL de la page d’accueil représente l’application web dans votre locataire. Le principal de service qui apparaît dans Identités managéesne doit pas avoir d’URL de page d’accueil et l’ID d’objet doit correspondre à la valeur de l’ID d’objet de l’identité managée dans l’étape précédente.
Sélectionnez le principal de service pour l’identité managée.
Dans Vue d’ensemble, sélectionnez Autorisations ; vous verrez alors les autorisations ajoutées pour Microsoft Graph.
Appeler Microsoft Graph
Les classes ChainedTokenCredential, ManagedIdentityCredential et EnvironmentCredential sont utilisées pour obtenir des informations d’identification sous forme de jeton pour votre code afin d’autoriser les requêtes adressées à Microsoft Graph. Créez une instance de la classe ChainedTokenCredential, qui utilise l’identité managée dans l’environnement App Service ou les variables d’environnement de développement pour récupérer les jetons et les attacher au client du service. L’exemple de code suivant obtient les informations d’identification du jeton authentifiées, et les utilise pour créer un objet de client de service, qui obtient les utilisateurs du groupe.
Pour voir ce code dans un exemple d’application, consultez l’exemple sur GitHub.
Installer le package de bibliothèque de client Microsoft.Identity.Web.GraphServiceClient
Installez les packages NuGet Microsoft.Graph et Microsoft.Identity.Web.GraphServiceClient dans votre projet à l’aide de l’interface de ligne de commande (CLI) .NET ou de la console du Gestionnaire de package dans Visual Studio.
CLI .NET
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.GraphServiceClient
dotnet add package Microsoft.Graph
Console du Gestionnaire de package
Ouvrez le projet/la solution dans Visual Studio, puis ouvrez la console à l’aide de la commande Outils>Gestionnaire de package NuGet>Console du gestionnaire de package.
Exécutez les commandes d’installation.
Install-Package Microsoft.Identity.Web.GraphServiceClient
Install-Package Microsoft.Graph
Exemple
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Logging;
using Microsoft.Graph;
using Azure.Identity;
...
public IList<MSGraphUser> Users { get; set; }
public async Task OnGetAsync()
{
// Create the Graph service client with a ChainedTokenCredential which gets an access
// token using the available Managed Identity or environment variables if running
// in development.
var credential = new ChainedTokenCredential(
new ManagedIdentityCredential(),
new EnvironmentCredential());
string[] scopes = new[] { "https://graph.microsoft.com/.default" };
var graphServiceClient = new GraphServiceClient(
credential, scopes);
List<MSGraphUser> msGraphUsers = new List<MSGraphUser>();
try
{
//var users = await graphServiceClient.Users.Request().GetAsync();
var users = await graphServiceClient.Users.GetAsync();
foreach (var u in users.Value)
{
MSGraphUser user = new MSGraphUser();
user.userPrincipalName = u.UserPrincipalName;
user.displayName = u.DisplayName;
user.mail = u.Mail;
user.jobTitle = u.JobTitle;
msGraphUsers.Add(user);
}
}
catch (Exception ex)
{
string msg = ex.Message;
}
Users = msGraphUsers;
}
Nettoyer les ressources
Si vous avez terminé ce tutoriel et que vous n’avez plus besoin de l’application web ni des ressources associées, nettoyez les ressources que vous avez créées.