Samouczek: uzyskiwanie dostępu do programu Microsoft Graph z zabezpieczonej aplikacji .NET jako aplikacji

Dowiedz się, jak uzyskać dostęp do programu Microsoft Graph z poziomu aplikacji internetowej działającej w usłudze aplikacja systemu Azure Service.

Diagram that shows accessing Microsoft Graph.

Chcesz wywołać program Microsoft Graph dla aplikacji internetowej. Bezpiecznym sposobem udzielenia aplikacji internetowej dostępu do danych jest użycie tożsamości zarządzanej przypisanej przez system. Tożsamość zarządzana firmy Microsoft Entra ID umożliwia usłudze App Service dostęp do zasobów za pośrednictwem kontroli dostępu opartej na rolach (RBAC) bez konieczności poświadczeń aplikacji. Po przypisaniu tożsamości zarządzanej do aplikacji internetowej platforma Azure zajmuje się tworzeniem i dystrybucją certyfikatu. Nie musisz martwić się o zarządzanie wpisami tajnymi ani poświadczeniami aplikacji.

Z tego samouczka dowiesz się, jak wykonywać następujące czynności:

  • Utwórz tożsamość zarządzaną przypisaną przez system w aplikacji internetowej.
  • Dodaj uprawnienia interfejsu API programu Microsoft Graph do tożsamości zarządzanej.
  • Wywoływanie programu Microsoft Graph z aplikacji internetowej przy użyciu tożsamości zarządzanych.

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure.

Wymagania wstępne

  • Aplikacja internetowa działająca w usłudze aplikacja systemu Azure z włączonym modułem uwierzytelniania/autoryzacji usługi App Service.

Włączanie tożsamości zarządzanej w aplikacji

Jeśli tworzysz i publikujesz aplikację internetową za pomocą programu Visual Studio, tożsamość zarządzana została włączona w aplikacji.

  1. W usłudze app Service wybierz pozycję Tożsamość w okienku po lewej stronie, a następnie wybierz pozycję Przypisany system.

  2. Sprawdź, czy stan ma wartość Włączone. Jeśli nie, wybierz pozycję Zapisz , a następnie wybierz pozycję Tak , aby włączyć tożsamość zarządzaną przypisaną przez system. Po włączeniu tożsamości zarządzanej stan jest ustawiony na Włączone , a identyfikator obiektu jest dostępny.

  3. Zanotuj wartość Identyfikator obiektu, która będzie potrzebna w następnym kroku.

Screenshot that shows the system-assigned identity.

Udzielanie dostępu do programu Microsoft Graph

Podczas uzyskiwania dostępu do programu Microsoft Graph tożsamość zarządzana musi mieć odpowiednie uprawnienia do operacji, którą chce wykonać. Obecnie nie ma możliwości przypisania takich uprawnień za pośrednictwem centrum administracyjnego firmy Microsoft Entra.

  1. Uruchom następujący skrypt, aby dodać żądane uprawnienia interfejsu API programu Microsoft Graph do obiektu jednostki usługi tożsamości zarządzanej.

    # 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. Po wykonaniu skryptu możesz sprawdzić w centrum administracyjnym firmy Microsoft Entra, że żądane uprawnienia interfejsu API są przypisane do tożsamości zarządzanej.

  3. Przejdź do pozycji Aplikacje, a następnie wybierz pozycję Aplikacje dla przedsiębiorstw. W tym okienku są wyświetlane wszystkie jednostki usługi w dzierżawie. Dodaj filtr "Typ aplikacji==Tożsamości zarządzane" i wybierz jednostkę usługi dla tożsamości zarządzanej.

    Jeśli korzystasz z tego samouczka, istnieją dwie jednostki usługi o tej samej nazwie wyświetlanej (Na przykład SecureWebApp20200941113531). Jednostka usługi, która ma adres URL strony głównej, reprezentuje aplikację internetową w dzierżawie. Jednostka usługi wyświetlana w tożsamościach zarządzanych nie powinna mieć wymienionego adresu URL strony głównej, a identyfikator obiektu powinien być zgodny z wartością identyfikatora obiektu tożsamości zarządzanej w poprzednim kroku.

  4. Wybierz jednostkę usługi dla tożsamości zarządzanej.

    Screenshot that shows the All applications option.

  5. W obszarze Przegląd wybierz pozycję Uprawnienia i zobaczysz dodane uprawnienia dla programu Microsoft Graph.

    Screenshot that shows the Permissions pane.

Wywoływanie programu Microsoft Graph

Klasy ChainedTokenCredential, ManagedIdentityCredential i EnvironmentCredential służą do uzyskiwania poświadczeń tokenu dla kodu w celu autoryzowania żądań do programu Microsoft Graph. Utwórz wystąpienie klasy ChainedTokenCredential , która używa tożsamości zarządzanej w środowisku usługi App Service lub zmiennych środowiskowych programowania do pobierania tokenów i dołączania ich do klienta usługi. Poniższy przykładowy kod pobiera uwierzytelnione poświadczenia tokenu i używa go do utworzenia obiektu klienta usługi, który pobiera użytkowników w grupie.

Aby zobaczyć ten kod w ramach przykładowej aplikacji, zobacz:

Instalowanie pakietu biblioteki klienta Microsoft.Identity.Web.MicrosoftGraph

Zainstaluj pakiet NuGet Microsoft.Identity.Web.MicrosoftGraph w projekcie przy użyciu interfejsu wiersza polecenia platformy .NET Core lub konsoli Menedżer pakietów w programie Visual Studio.

Wiersz polecenia platformy .NET Core

Otwórz wiersz polecenia i przejdź do katalogu zawierającego plik projektu.

Uruchom polecenia instalacji.

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

Konsola menedżera pakietów

Otwórz projekt/rozwiązanie w programie Visual Studio i otwórz konsolę za pomocą polecenia Narzędzia>NuGet Menedżer pakietów> Menedżer pakietów Console.

Uruchom polecenia instalacji.

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

Przykład platformy .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;
}

Czyszczenie zasobów

Jeśli skończysz z tym samouczkiem i nie potrzebujesz już aplikacji internetowej ani skojarzonych zasobów, wyczyść utworzone zasoby.

Usuwanie grupy zasobów

W witrynie Azure Portal wybierz pozycję Grupy zasobów z menu portalu i wybierz grupę zasobów zawierającą usługę App Service i plan usługi App Service.

Wybierz pozycję Usuń grupę zasobów, aby usunąć grupę zasobów i wszystkie zasoby.

Screenshot that shows deleting the resource group.

Uruchomienie tego polecenia może potrwać kilka minut.

Następne kroki

W tym samouczku zawarto informacje na temat wykonywania następujących czynności:

  • Utwórz tożsamość zarządzaną przypisaną przez system w aplikacji internetowej.
  • Dodaj uprawnienia interfejsu API programu Microsoft Graph do tożsamości zarządzanej.
  • Wywoływanie programu Microsoft Graph z aplikacji internetowej przy użyciu tożsamości zarządzanych.

Dowiedz się, jak połączyć aplikację platformy .NET Core, aplikację w języku Python, aplikację Java lub aplikację Node.js z bazą danych.