Självstudie: Få åtkomst till Microsoft Graph från en skyddad .NET-app som app

Lär dig hur du kommer åt Microsoft Graph från en webbapp som körs i Azure App Service.

Diagram that shows accessing Microsoft Graph.

Du vill anropa Microsoft Graph för webbappen. Ett säkert sätt att ge webbappen åtkomst till data är att använda en systemtilldelad hanterad identitet. Med en hanterad identitet från Microsoft Entra ID kan App Service komma åt resurser via rollbaserad åtkomstkontroll (RBAC) utan att kräva autentiseringsuppgifter för appen. När du har tilldelat en hanterad identitet till din webbapp tar Azure hand om skapandet och distributionen av ett certifikat. Du behöver inte bekymra dig om att hantera hemligheter eller autentiseringsuppgifter för appar.

I den här självstudien lär du dig att:

  • Skapa en systemtilldelad hanterad identitet i en webbapp.
  • Lägg till Microsoft Graph API-behörigheter till en hanterad identitet.
  • Anropa Microsoft Graph från en webbapp med hjälp av hanterade identiteter.

Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt Azure-konto innan du börjar.

Förutsättningar

Aktivera hanterad identitet i appen

Om du skapar och publicerar din webbapp via Visual Studio aktiverades den hanterade identiteten i din app åt dig.

  1. I apptjänsten väljer du Identitet i den vänstra rutan och väljer sedan Systemtilldelad.

  2. Kontrollera att Status är inställt på På. Annars väljer du Spara och sedan Ja för att aktivera den systemtilldelade hanterade identiteten. När den hanterade identiteten är aktiverad anges statusen till och objekt-ID är tillgängligt.

  3. Anteckna objekt-ID-värdet som du behöver i nästa steg.

Screenshot that shows the system-assigned identity.

Bevilja åtkomst till Microsoft Graph

Vid åtkomst till Microsoft Graph måste den hanterade identiteten ha rätt behörighet för den åtgärd som den vill utföra. För närvarande finns det inget alternativ för att tilldela sådana behörigheter via administrationscentret för Microsoft Entra.

  1. Kör följande skript för att lägga till de begärda Microsoft Graph API-behörigheterna i objektet för tjänstens huvudnamn för hanterad identitet.

    # 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. När du har kört skriptet kan du i administrationscentret för Microsoft Entra kontrollera att de begärda API-behörigheterna har tilldelats till den hanterade identiteten.

  3. Gå till Program och välj sedan Företagsprogram. I det här fönstret visas alla tjänstens huvudnamn i din klientorganisation. Lägg till ett filter för "Programtyp==Hanterade identiteter" och välj tjänstens huvudnamn för den hanterade identiteten.

    Om du följer den här självstudien finns det två tjänsthuvudnamn med samma visningsnamn (Till exempel SecureWebApp2020094113531). Tjänstens huvudnamn som har en webbadress till startsidan representerar webbappen i din klientorganisation. Tjänstens huvudnamn som visas i Hanterade identiteter bör inte ha någon webbadress till startsidan och objekt-ID :t ska matcha objekt-ID-värdet för den hanterade identiteten i föregående steg.

  4. Välj tjänstens huvudnamn för den hanterade identiteten.

    Screenshot that shows the All applications option.

  5. I Översikt väljer du Behörigheter så visas de tillagda behörigheterna för Microsoft Graph.

    Screenshot that shows the Permissions pane.

Anropa Microsoft Graph

Klasserna ChainedTokenCredential, ManagedIdentityCredential och EnvironmentCredential används för att hämta en tokenautentiseringsuppgift för din kod för att auktorisera begäranden till Microsoft Graph. Skapa en instans av klassen ChainedTokenCredential , som använder den hanterade identiteten i App Service-miljön eller variablerna för utvecklingsmiljön för att hämta token och koppla dem till tjänstklienten. I följande kodexempel hämtas de autentiserade tokenautentiseringsuppgifterna och används för att skapa ett tjänstklientobjekt som hämtar användarna i gruppen.

Information om hur du ser den här koden som en del av ett exempelprogram finns i:

Installera klientbibliotekspaketet Microsoft.Identity.Web.MicrosoftGraph

Installera NuGet-paketet Microsoft.Identity.Web.MicrosoftGraph i projektet med hjälp av kommandoradsgränssnittet för .NET Core eller Package Manager-konsolen i Visual Studio.

.NET Core-kommandorad

Öppna en kommandorad och växla till katalogen som innehåller projektfilen.

Kör installationskommandona.

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

Package Manager-konsol

Öppna projektet/lösningen i Visual Studio och öppna konsolen med hjälp av kommandot Verktyg>NuGet Package Manager>Package Manager Console.

Kör installationskommandona.

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

.NET-exempel

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

Rensa resurser

Om du är klar med den här självstudien och inte längre behöver webbappen eller associerade resurser rensar du de resurser som du skapade.

Ta bort resursgruppen

I Azure-portalen väljer du Resursgrupper på portalmenyn och väljer den resursgrupp som innehåller din App Service- och App Service-plan.

Välj Ta bort resursgrupp för att ta bort resursgruppen och alla resurser.

Screenshot that shows deleting the resource group.

Det kan ta flera minuter att köra det här kommandot.

Nästa steg

I den här självstudiekursen lärde du dig att:

  • Skapa en systemtilldelad hanterad identitet i en webbapp.
  • Lägg till Microsoft Graph API-behörigheter till en hanterad identitet.
  • Anropa Microsoft Graph från en webbapp med hjälp av hanterade identiteter.

Lär dig hur du ansluter en .NET Core-app, Python-app, Java-app eller Node.js-app till en databas.