Zelfstudie: Microsoft Graph openen vanuit een beveiligde .NET-app als de app

Ontdek hoe u toegang tot Microsoft Graph krijgt vanuit een web-app die wordt uitgevoerd in Azure App Service.

Diagram that shows accessing Microsoft Graph.

U wilt Microsoft Graph aanroepen voor de web-app. Een veilige manier om uw web-app toegang tot gegevens te geven, is een door het systeem toegewezen beheerde identiteit te gebruiken. Met een beheerde identiteit van Microsoft Entra ID heeft App Service toegang tot resources via op rollen gebaseerd toegangsbeheer (RBAC), zonder dat hiervoor app-referenties nodig zijn. Nadat een beheerde identiteit aan uw web-app is toegewezen, wordt er in Azure een certificaat gemaakt en gedistribueerd. U hoeft zich geen zorgen te maken over het beheren van geheimen of app-referenties.

In deze zelfstudie leert u het volgende:

  • Een door het systeem toegewezen beheerde identiteit maken in een web-app
  • Microsoft Graph API-machtigingen toevoegen aan een beheerde identiteit
  • Microsoft Graph aanroepen vanuit een web-app met beheerde identiteiten

Als u geen Azure-abonnement hebt, kunt u een gratis Azure-account maken voordat u begint.

Vereisten

Een beheerde identiteit inschakelen voor een app

Als u uw web-app via Visual Studio maakt en publiceert, was de beheerde identiteit al voor u ingeschakeld in uw app.

  1. In uw app-service selecteert u Identiteit in het linkerdeelvenster en selecteert u vervolgens Door het systeem toegewezen.

  2. Verifieer dat Status is ingesteld op Aan. Als dat niet het geval is, selecteert u Opslaan en vervolgens Ja om de door het systeem toegewezen beheerde identiteit in te schakelen. Wanneer de beheerde identiteit is ingeschakeld, is de status ingesteld op Aan en is de object-id beschikbaar.

  3. Noteer de Object-id-waarde. U hebt deze in de volgende stap nodig.

Screenshot that shows the system-assigned identity.

Toegang tot Microsoft Graph verlenen

Voor toegang tot Microsoft Graph moet de beheerde identiteit de juiste machtigingen hebben voor de bewerking die deze wil uitvoeren. Er is momenteel geen optie om dergelijke machtigingen toe te wijzen via het Microsoft Entra-beheercentrum.

  1. Voer het volgende script uit om de aangevraagde Microsoft Graph API-machtigingen toe te voegen aan het service-principal-object voor beheerde identiteiten.

    # 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. Nadat u het script hebt uitgevoerd, kunt u in het Microsoft Entra-beheercentrum controleren of de aangevraagde API-machtigingen zijn toegewezen aan de beheerde identiteit.

  3. Ga naar Toepassingen en selecteer vervolgens Bedrijfstoepassingen. Op dit venster worden alle service-principals in uw tenant weergegeven. Voeg een filter toe voor 'Toepassingstype==Beheerde identiteiten' en selecteer de service-principal voor de beheerde identiteit.

    Als u deze zelfstudie volgt, zijn er twee service-principals met dezelfde weergavenaam (bijvoorbeeld SecureWebApp2020094113531). De service-principal met een Startpagina-URL vertegenwoordigt de web-app in uw tenant. De service-principal die wordt weergegeven in Beheerde identiteiten mag geen startpagina-URL bevatten en de object-id moet overeenkomen met de object-id-waarde van de beheerde identiteit in de vorige stap.

  4. Selecteer de service-principal voor de beheerde identiteit.

    Screenshot that shows the All applications option.

  5. In Overzicht selecteert u Machtigingen. U ziet dan de toegevoegde machtigingen voor Microsoft Graph.

    Screenshot that shows the Permissions pane.

Microsoft Graph aanroepen

De klassen ChainedTokenCredential, ManagedIdentityCredential en EnvironmentCredential worden gebruikt om een tokenreferentie voor uw code op te halen om aanvragen aan Microsoft Graph te autoriseren. Maak een exemplaar van de klasse ChainedTokenCredential , die gebruikmaakt van de beheerde identiteit in de App Service-omgeving of de variabelen voor de ontwikkelomgeving om tokens op te halen en te koppelen aan de serviceclient. Met het volgende codevoorbeeld wordt de geverifieerde tokenreferentie opgehaald en gebruikt om een serviceclientobject te maken, waarmee de gebruikers in de groep worden opgehaald.

Als u deze code wilt zien als onderdeel van een voorbeeldtoepassing, raadpleegt u het volgende:

Het pakket Microsoft.Identity.Web.MicrosoftGraph-clientbibliotheek installeren

Installeer het Microsoft.Identity.Web.MicrosoftGraph NuGet-pakket in uw project met behulp van de opdrachtregelinterface van .NET Core of de Pakketbeheer Console in Visual Studio.

.NET Core-opdrachtregel

Open een opdrachtregel en ga naar de map die uw projectbestand bevat.

Voer de installatieopdrachten uit.

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

Package Manager Console

Open het project/de oplossing in Visual Studio en open de console met de opdracht Hulpprogramma's>NuGet Package Manager>Package Manager Console.

Voer de installatieopdrachten uit.

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

.NET-voorbeeld

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

Resources opschonen

Als u klaar bent met deze zelfstudie en de web-app of bijbehorende resources niet meer nodig hebt, kunt u de gemaakte resources opschonen.

De resourcegroep verwijderen

In de Azure-portal selecteert u Resourcegroepen in het portalmenu en selecteert u vervolgens de resourcegroep die uw app-service en App Service-plan bevat.

Selecteer Resourcegroep verwijderen om de resourcegroep en alle resources te verwijderen.

Screenshot that shows deleting the resource group.

Het uitvoeren van deze opdracht kan enkele minuten duren.

Volgende stappen

In deze zelfstudie heeft u het volgende geleerd:

  • Een door het systeem toegewezen beheerde identiteit maken in een web-app
  • Microsoft Graph API-machtigingen toevoegen aan een beheerde identiteit
  • Microsoft Graph aanroepen vanuit een web-app met beheerde identiteiten

Ontdek hoe u een .NET Core-app, Python-app, Java-app of Node.js-app verbindt met een database.