Esercitazione: Accedere a Microsoft Graph da un'app .NET protetta come app

Informazioni su come accedere a Microsoft Graph da un'app Web in esecuzione nel Servizio app di Azure.

Diagram that shows accessing Microsoft Graph.

Si vuole chiamare Microsoft Graph per l'app Web. Un modo sicuro per concedere all'app Web l'accesso ai dati consiste nell'usare un'identità gestita assegnata dal sistema. Un'identità gestita da Microsoft Entra ID consente servizio app di accedere alle risorse tramite il controllo degli accessi in base al ruolo, senza richiedere le credenziali dell'app. Dopo aver assegnato un'identità gestita all'app Web, Azure si occupa della creazione e della distribuzione di un certificato. Non occorre preoccuparsi di gestire i segreti o le credenziali dell'app.

In questa esercitazione apprenderai a:

  • Creare un'identità gestita assegnata dal sistema in un'app Web.
  • Aggiungere le autorizzazioni dell'API Microsoft Graph a un'identità gestita.
  • Chiamare Microsoft Graph da un'app Web usando identità gestite.

Se non si ha una sottoscrizione di Azure, creare un account Azure gratuito prima di iniziare.

Prerequisiti

Abilitare l'identità gestita nell'app

Se si crea e si pubblica l'app Web tramite Visual Studio, l'identità gestita è già stata abilitata automaticamente nell'app.

  1. Nel servizio app selezionare Identità nel riquadro sinistro e quindi selezionare Assegnata dal sistema.

  2. Verificare che lo Stato sia impostato su . In caso contrario, selezionare Salva e quindi per abilitare l'identità gestita assegnata dal sistema. Una volta abilitata l'identità gestita, lo stato è impostato su e l'ID oggetto è disponibile.

  3. Prendere nota del valore di ID oggetto, che sarà necessario nel passaggio successivo.

Screenshot that shows the system-assigned identity.

Concedere l'accesso a Microsoft Graph

Quando si accede a Microsoft Graph, l'identità gestita deve disporre delle autorizzazioni appropriate per l'operazione da eseguire. Attualmente, non è possibile assegnare tali autorizzazioni tramite l'interfaccia di amministrazione di Microsoft Entra.

  1. Eseguire lo script seguente per aggiungere le autorizzazioni dell'API Microsoft Graph richieste all'oggetto entità servizio dell'identità gestita.

    # Install the module.
    # Install-Module Microsoft.Graph -Scope CurrentUser
    
    # The tenant ID
    $TenantId = "11111111-1111-1111-1111-111111111111"
    
    # 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. Dopo aver eseguito lo script, è possibile verificare nell'interfaccia di amministrazione di Microsoft Entra che le autorizzazioni API richieste siano assegnate all'identità gestita.

  3. Passare ad Applicazioni e quindi selezionare Applicazioni aziendali. Questo riquadro mostra tutte le entità servizio presenti nel tenant. Aggiungere un filtro per "Tipo di applicazione==Identità gestite" e selezionare l'entità servizio per l'identità gestita.

    Se si segue questa esercitazione, sono disponibili due entità servizio con lo stesso nome visualizzato, ad esempio SecureWebApp2020094113531. L'entità servizio con URL della home page rappresenta l'app Web nel tenant. L'entità servizio visualizzata in Identità gestite non deve avere un URL della home page elencato e l'ID oggetto deve corrispondere al valore ID oggetto dell'identità gestita nel passaggio precedente.

  4. Selezionare l'entità servizio per l'identità gestita.

    Screenshot that shows the All applications option.

  5. In Panoramica selezionare Autorizzazioni per visualizzare le autorizzazioni aggiunte per Microsoft Graph.

    Screenshot that shows the Permissions pane.

Chiamare Microsoft Graph

Le classi ChainedTokenCredential, ManagedIdentityCredential e EnvironmentCredential vengono usate per ottenere credenziali di token per il codice per autorizzare le richieste a Microsoft Graph. Creare un'istanza della classe ChainedTokenCredential, che usa l'identità gestita nell'ambiente servizio app o le variabili di ambiente di sviluppo per recuperare i token e collegarli al client del servizio. L'esempio di codice seguente ottiene le credenziali del token autenticato e le usa per creare un oggetto client del servizio, che recupera gli utenti nel gruppo.

Per visualizzare questo codice come parte di un'applicazione di esempio, vedere:

Installare il pacchetto della libreria client Microsoft.Identity.Web.MicrosoftGraph

Installare il pacchetto NuGet Microsoft.Identity.Web.MicrosoftGraph nel progetto usando l'interfaccia della riga di comando di .NET Core o la console Gestione pacchetti in Visual Studio.

Riga di comando di .NET Core

Aprire una riga di comando e passare alla directory che contiene il file di progetto.

Eseguire i comandi di installazione.

dotnet add package Microsoft.Identity.Web.MicrosoftGraph
dotnet add package Microsoft.Graph

Console di gestione pacchetti

Aprire il progetto o la soluzione in Visual Studio, quindi aprire la console selezionando Strumenti>Gestione pacchetti NuGet>Console di Gestione pacchetti.

Eseguire i comandi di installazione.

Install-Package Microsoft.Identity.Web.MicrosoftGraph
Install-Package Microsoft.Graph

Esempio .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;
}

Pulire le risorse

Se l'esercitazione è stata completata e l'app Web o le risorse associate non sono più necessarie, pulire le risorse create.

Eliminare il gruppo di risorse

Nel portale di Azure selezionare Gruppi di risorse dal menu del portale e selezionare il gruppo di risorse contenente il servizio app e il piano di servizio app.

Fare clic su Elimina gruppo di risorse per eliminare il gruppo e tutte le risorse al suo interno.

Screenshot that shows deleting the resource group.

L'esecuzione di questo comando potrebbe richiedere diversi minuti.

Passaggi successivi

Questa esercitazione ha descritto come:

  • Creare un'identità gestita assegnata dal sistema in un'app Web.
  • Aggiungere le autorizzazioni dell'API Microsoft Graph a un'identità gestita.
  • Chiamare Microsoft Graph da un'app Web usando identità gestite.

Informazioni su come connettere un'app .NET Core, un'app Python, un'app Java o un'app Node.js a un database.