Teilen über


Zugreifen auf Microsoft Graph über eine geschützte App als App

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

Diagramm: Zugreifen 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. Mit einer verwalteten Identität von Microsoft Entra ID kann App Service mittels rollenbasierter Zugriffssteuerung (Role-Based Access Control, RBAC) auf Ressourcen zugreifen, ohne dass App-Anmeldeinformationen benötigt werden. 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
  • Hinzufügen von Microsoft Graph-API-Berechtigungen zu einer verwalteten Identität
  • Aufrufen von Microsoft Graph über eine Web-App unter Verwendung verwalteter Identitäten

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

Voraussetzungen

Aktivieren einer verwalteten Identität für die App

Wenn Sie Ihre Web-App mit Visual Studio erstellen und veröffentlichen, wird die verwaltete Identität für Sie in Ihrer App aktiviert. Wählen Sie in Ihrer App Service-Instanz im linken Bereich die Option Identität und dann Vom System zugewiesen aus. Vergewissern Sie sich, dass der Status auf Ein festgelegt ist. Falls nicht: Wählen Sie Speichern und dann Ja aus, um die systemseitig 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.

Notieren Sie sich den Wert der Objekt-ID für den nächsten Schritt.

Screenshot: Systemseitig zugewiesene Identität

Gewähren von Zugriff auf Microsoft Graph

Beim Zugreifen auf Microsoft Graph muss die verwaltete Identität über die entsprechenden Berechtigungen für den Vorgang verfügen, der ausgeführt werden soll. Derzeit gibt es keine Möglichkeit, diese Berechtigungen über das Microsoft Entra Admin Center zuzuweisen. Mit dem folgenden Skript werden die angeforderten Microsoft Graph-API-Berechtigungen dem Dienstprinzipalobjekt der verwalteten Identität hinzugefügt:

# 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

Nachdem Sie das Skript ausgeführt haben, können Sie im Microsoft Entra Admin Center überprüfen, ob der verwalteten Identität die angeforderten API-Berechtigungen zugewiesen wurden.

Wechseln Sie zu Anwendungen und dann zu Unternehmensanwendungen. In diesem Bereich werden alle Dienstprinzipale Ihres Mandanten angezeigt. Fügen Sie einen Filter für „Anwendungstyp == Verwaltete Identitäten“ hinzu, und wählen Sie den Dienstprinzipal für die verwaltete Identität aus.

In diesem Tutorial werden zwei Dienstprinzipale mit dem gleichen Anzeigenamen verwendet (z. B. „SecureWebApp2020094113531“). Der Dienstprinzipal mit einer URL für Startseite steht für die Web-App Ihres Mandanten. Für den Dienstprinzipal, der unter Verwaltete Identitäten angezeigt wird, sollte keineHomepage-URL aufgeführt sein, und die Objekt-ID sollte mit dem Objekt-ID-Wert der verwalteten Identität im vorherigen Schritt übereinstimmen.

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

Screenshot: Option „Alle Anwendungen“

Wenn Sie unter Übersicht die Option Berechtigungen auswählen, werden die hinzugefügten Berechtigungen für Microsoft Graph angezeigt.

Screenshot: Bereich „Berechtigungen“

Aufrufen von Microsoft Graph

Die Klassen ChainedTokenCredential, ManagedIdentityCredential und EnvironmentCredential werden verwendet, um Tokenanmeldeinformationen für Ihren Code zum Autorisieren von Anforderungen an Microsoft Graph abzurufen. 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.

Im Beispiel auf GitHub können Sie sich diesen Code in einer Beispielanwendung ansehen.

Installieren des Microsoft.Identity.Web.GraphServiceClient-Clientbibliothekspakets

Installieren Sie die NuGet-Pakete Microsoft.Graph und Microsoft.Identity.Web.GraphServiceClient in Ihrem Projekt mithilfe der .NET-Befehlszeilenschnittstelle (CLI) oder der Paket-Manager-Konsole in Visual Studio.

.NET CLI

Ö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.GraphServiceClient
dotnet add package Microsoft.Graph

Paket-Manager-Konsole

Öffnen Sie das Projekt bzw. die Projektmappe in Visual Studio, und navigieren Sie zu Extras>NuGet-Paket-Manager>Paket-Manager-Konsole, um die Konsole zu öffnen.

Führen Sie die Installationsbefehle aus.

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

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 Tutorial abgeschlossen haben und die Web-App und die zugehörigen Ressourcen nicht mehr benötigen, sollten Sie die von Ihnen erstellten Ressourcen bereinigen.

Nächste Schritte