Condividi tramite


Accedere a Microsoft Graph da un'app protetta come app

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

Diagramma che mostra l'accesso a 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 di Microsoft Entra ID consente al 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. Nel servizio app selezionare Identità nel riquadro sinistro e quindi selezionare Assegnata dal sistema. 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.

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

Screenshot che mostra l'identità assegnata dal sistema.

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. Lo script seguente aggiungerà le autorizzazioni dell'API Microsoft Graph necessarie all'oggetto entità servizio dell'identità gestita.

# 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

Dopo aver eseguito lo script, è possibile verificare nell’interfaccia di amministrazione di Microsoft Entra che le autorizzazioni API necessarie siano assegnate all'identità gestita.

Passare a 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.

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

Screenshot che mostra l'opzione Tutte le applicazioni.

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

Screenshot che mostra il riquadro Autorizzazioni.

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 del 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 vedere questo codice come parte di un'applicazione di esempio, vedere l'esempio in GitHub.

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

Installare i pacchetti Microsoft Graph e Microsoft.Identity.Web.GraphServiceClient NuGet nel progetto usando l'interfaccia della riga di comando di .NET o la console di Gestione pacchetti in Visual Studio.

CLI .NET

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.GraphServiceClient
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.GraphServiceClient
Install-Package Microsoft.Graph

Esempio

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.

Passaggi successivi