Udostępnij za pośrednictwem


Uzyskiwanie dostępu do programu Microsoft Graph z zabezpieczonej aplikacji 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. W usłudze app Service wybierz pozycję Tożsamość w okienku po lewej stronie, a następnie wybierz pozycję Przypisany system. 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.

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. Poniższy skrypt 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 = "00001111-aaaa-2222-bbbb-3333cccc4444"

# 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

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.

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.

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

Screenshot that shows the All applications option.

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 jako część przykładowej aplikacji, zobacz przykład w witrynie GitHub.

Instalowanie pakietu biblioteki klienta Microsoft.Identity.Web.GraphServiceClient

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

.NET CLI

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

Uruchom polecenia instalacji.

dotnet add package Microsoft.Identity.Web.GraphServiceClient
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.GraphServiceClient
Install-Package Microsoft.Graph

Przykład

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.

Następne kroki