Lernprogramm: Zugreifen auf Microsoft Graph aus einer gesicherten .NET-App als App

Erfahren Sie, wie Sie über eine Web-App, die auf Azure App Service ausgeführt wird, auf Microsoft Graph zugreifen.

Diagramm mit Zugriff auf Microsoft Graph.

Sie möchten Microsoft Graph für die Web-App aufrufen. Eine sichere Methode, um Ihrer Web-App den Zugriff auf Daten zu gewähren, ist die Verwendung einer systemseitig zugewiesenen verwalteten Identität. Eine verwaltete Identität aus Microsoft Entra ID ermöglicht App Service den Zugriff auf Ressourcen über rollenbasierte Zugriffssteuerung (RBAC), ohne dass App-Anmeldeinformationen erforderlich sind. Nachdem Sie Ihrer Web-App eine verwaltete Identität zugewiesen haben, kümmert sich Azure um die Erstellung und Verteilung eines Zertifikats. Sie müssen sich keine Gedanken über die Verwaltung von Geheimnissen oder App-Anmeldeinformationen machen.

In diesem Tutorial lernen Sie Folgendes:

  • Erstellen einer systemseitig zugewiesenen verwalteten Identität in einer Web-App
  • Fügen Sie einer verwalteten Identität Microsoft Graph API-Berechtigungen hinzu.
  • Rufen Sie Microsoft Graph aus einer Web-App mithilfe von verwalteten Identitäten auf.

Wenn Sie kein Azure Konto haben, erstellen Sie ein free-Konto bevor Sie beginnen.

Voraussetzungen

Aktivieren einer verwalteten Identität für die App

Wenn Sie Ihre Web-App über Visual Studio erstellen und veröffentlichen, wurde die verwaltete Identität für Sie in Ihrer App aktiviert.

  1. Wählen Sie im App Service im linken Bereich die Option Identität und dann Systemzuweisung aus.

  2. Vergewissern Sie sich, dass der Status auf Ein festgelegt ist.

    Wenn nicht, legen Sie sie auf "Ein" fest, und wählen Sie dann "Speichern" und dann "Ja " aus, um die vom System zugewiesene verwaltete Identität zu aktivieren. Wenn die verwaltete Identität aktiviert ist, ist der Status auf Ein festgelegt, und die Objekt-ID ist verfügbar.

  3. Notieren Sie sich den Wert der Objekt-ID , den Sie im nächsten Abschnitt benötigen.

    Screenshot der vom System zugewiesenen Identität.

Gewähren des Zugriffs auf Microsoft Graph

Beim Zugriff auf die Microsoft Graph muss die verwaltete Identität über die richtigen Berechtigungen für den Auszuführenden Vorgang verfügen. Derzeit gibt es keine Möglichkeit, solche Berechtigungen über die Microsoft Entra admin center zuzuweisen.

  1. Führen Sie das folgende Skript aus, um die angeforderten Microsoft Graph API Berechtigungen zum Prinzipalobjekt des verwalteten Identitätsdiensts hinzuzufügen.

    # 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. Überprüfen Sie nach dem Ausführen des Skripts im Microsoft Entra Admin Center , ob die angeforderten API-Berechtigungen der verwalteten Identität zugewiesen sind.

  3. Wechseln Sie zu "Anwendungen". In diesem Bereich werden alle Dienstprinzipale Ihres Mandanten angezeigt. Wählen Sie "Filter hinzufügen" aus, und geben Sie dann den Anwendungstyp ==Verwaltete Identitäten ein.

  4. Wählen Sie den Dienstprinzipal für die verwaltete Identität aus.

    Wenn Sie diesem Lernprogramm folgen, gibt es zwei Dienstprinzipale mit demselben Anzeigenamen, z. B. secureWebApp. Der Dienstprinzipal mit einer Homepage-URL repräsentiert die Webanwendung in Ihrer Mandantenumgebung. Der Dienstprinzipal, der in verwalteten Identitäten angezeigt wird, sollte nicht über eine Homepage-URL verfügen, und die Objekt-ID sollte mit dem Objekt-ID-Wert der verwalteten Identität im vorherigen Abschnitt übereinstimmen.

  5. Wählen Sie den Dienstprinzipal für die verwaltete Identität aus.

    Screenshot der Option

  6. Wählen Sie in "Übersicht" die Option "Berechtigungen" aus. Die hinzugefügten Berechtigungen für Microsoft Graph werden angezeigt.

    Screenshot des Bereichs

Microsoft Graph anrufen

Die ChainedTokenCredential, ManagedIdentityCredential und EnvironmentCredential Klassen werden verwendet, um eine Tokenanmeldeinformation für Ihren Code abzurufen, um Anforderungen an Microsoft Graph zu autorisieren. Erstellen Sie eine Instanz der ChainedTokenCredential-Klasse, die die verwaltete Identität in der App Service-Umgebung oder die Entwicklungsumgebungsvariablen verwendet, um Token abrufen und an den Dienstclient anfügen zu können. Im folgenden Codebeispiel werden die authentifizierten Tokenanmeldeinformationen abgerufen und zum Erstellen eines Dienstclientobjekts verwendet, mit dem die Benutzer der Gruppe abgerufen werden.

Diesen Code können Sie sich in einer Beispielanwendung ansehen unter:

Installieren Sie das Paket "Microsoft.Identity.Web.MicrosoftGraph" der Clientbibliothek

Installieren Sie die Microsoft. Identity.Web.MicrosoftGraph NuGet-Paket in Ihrem Projekt mithilfe der .NET Core-Befehlszeilenschnittstelle oder der Package Manager Konsole in Visual Studio.

.NET Core-Befehlszeile

Öffnen Sie eine Befehlszeile, und wechseln Sie zu dem Verzeichnis, in dem Ihre Projektdatei enthalten ist.

Führen Sie die Installationsbefehle aus.

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

Package Manager Konsole

Öffnen Sie das Projekt/die Projektmappe in Visual Studio, und öffnen Sie die Konsole mithilfe des Befehls Tools>NuGet Package Manager>Package Manager Console.

Führen Sie die Installationsbefehle aus.

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

.NET Beispiel

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

Bereinigen von Ressourcen

Wenn Sie dieses Lernprogramm abgeschlossen haben und die Web-App oder die zugehörigen Ressourcen nicht mehr benötigen, bereinigen Sie die von Ihnen erstellten Ressourcen.

Löschen der Ressourcengruppe

  1. Wählen Sie im Azure-Portalressourcengruppen aus dem Azure-Portalmenü aus, und wählen Sie die Ressourcengruppe aus, die Ihren App-Dienst- und App-Serviceplan enthält.

  2. Wählen Sie Ressourcengruppe löschen aus, um die Ressourcengruppe und alle Ressourcen zu löschen.

    Screenshot, der das Löschen der Ressourcengruppe zeigt.

  3. Geben Sie den Namen der zu bestätigenden Ressourcengruppe ein.

Dieser Vorgang kann mehrere Minuten dauern.

In diesem Tutorial haben Sie Folgendes gelernt:

  • Erstellen einer systemseitig zugewiesenen verwalteten Identität in einer Web-App
  • Fügen Sie einer verwalteten Identität Microsoft Graph API-Berechtigungen hinzu.
  • Rufen Sie Microsoft Graph aus einer Web-App mithilfe von verwalteten Identitäten auf.

Erfahren Sie, wie Sie eine .NET Core-App oder Node.js App mit einer Datenbank verbinden.