Få åtkomst till Microsoft Graph från en skyddad app som app
Lär dig hur du kommer åt Microsoft Graph från en webbapp som körs i Azure App Service.
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
- Ett webbprogram som körs på Azure App Service som har modulen autentisering/auktorisering för App Service aktiverad.
Aktivera hanterad identitet i appen
Om du skapar och publicerar din webbapp via Visual Studio aktiverades den hanterade identiteten i din app åt dig. I apptjänsten väljer du Identitet i den vänstra rutan och väljer sedan Systemtilldelad. 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 På och objekt-ID är tillgängligt.
Anteckna objekt-ID-värdet som du behöver i nästa steg.
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. Följande skript lägger till de begärda Microsoft Graph API-behörigheterna till objektet för tjänstens huvudnamn för hanterad identitet.
# 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
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.
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.
Välj tjänstens huvudnamn för den hanterade identiteten.
I Översikt väljer du Behörigheter så visas de tillagda behörigheterna för Microsoft Graph.
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.
Om du vill se den här koden som en del av ett exempelprogram kan du läsa exemplet på GitHub.
Installera klientbibliotekspaketet Microsoft.Identity.Web.GraphServiceClient
Installera NuGet-paketen Microsoft.Graph och Microsoft.Identity.Web.GraphServiceClient i projektet med hjälp av .NET-kommandoradsgränssnittet (CLI) eller Package Manager-konsolen i Visual Studio.
.NET CLI
Öppna en kommandorad och växla till katalogen som innehåller projektfilen.
Kör installationskommandona.
dotnet add package Microsoft.Identity.Web.GraphServiceClient
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.GraphServiceClient
Install-Package Microsoft.Graph
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.