Tutoriel : Accéder à Microsoft Graph à partir d’une application . NET 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.

Diagram that shows accessing Microsoft Graph.

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

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.

  1. Dans votre service d’application, sélectionnez Identité dans le volet gauche, puis Affectée par le système.

  2. 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.

  3. Notez la valeur de l’ID d’objet, dont vous aurez besoin à l’étape suivante.

Screenshot that shows the system-assigned identity.

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.

  1. Exécutez le script suivant pour ajouter 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
    
  2. 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.

  3. 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.

  4. Sélectionnez le principal de service pour l’identité managée.

    Screenshot that shows the All applications option.

  5. Dans Vue d’ensemble, sélectionnez Autorisations ; vous verrez alors les autorisations ajoutées pour Microsoft Graph.

    Screenshot that shows the Permissions pane.

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 :

Installer le package de la bibliothèque de client Microsoft.Identity.Web.MicrosoftGraph

Installez le package NuGet Microsoft.Identity.Web.MicrosoftGraph dans votre projet à l’aide de l’interface de ligne de commande .NET Core ou de la console du gestionnaire de package 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.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.MicrosoftGraph
Install-Package Microsoft.Graph

Exemple .NET

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.

Supprimer le groupe de ressources

Dans le portail Azure, sélectionnez Groupes de ressources dans le menu du portail, puis sélectionnez le groupe de ressources qui contient votre service d’application et votre plan de service d’application.

Sélectionnez Supprimer le groupe de ressources pour supprimer le groupe de ressources et toutes les ressources.

Screenshot that shows deleting the resource group.

L’exécution de cette commande peut prendre plusieurs minutes.

Étapes suivantes

Dans ce didacticiel, vous avez appris à :

  • 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.

Découvrez comment connecter une application .NET Core, une application Python, une application Java ou une application Node.js à une base de données.