Mengakses Microsoft Graph dari aplikasi aman sebagai aplikasi

Pelajari cara mengakses Microsoft Graph dari aplikasi web yang berjalan di Azure App Service.

Diagram that shows accessing Microsoft Graph.

Anda ingin memanggil Microsoft Graph untuk aplikasi web. Cara yang aman untuk memberi aplikasi web Anda akses ke data adalah dengan menggunakan identitas terkelola yang ditetapkan sistem. Identitas terkelola dari MICROSOFT Entra ID memungkinkan App Service mengakses sumber daya melalui kontrol akses berbasis peran (RBAC), tanpa memerlukan kredensial aplikasi. Setelah menetapkan identitas terkelola ke aplikasi web Anda, Azure mengurus pembuatan dan distribusi sertifikat. Anda tidak perlu khawatir mengelola rahasia atau info masuk aplikasi.

Dalam tutorial ini, Anda akan mempelajari cara:

  • Membuat identitas terkelola yang ditetapkan sistem di aplikasi web.
  • Tambahkan izin API Microsoft Graph ke identitas terkelola.
  • Panggil Microsoft Graph dari aplikasi web dengan menggunakan identitas terkelola.

Jika Anda tidak memiliki Langganan Azure, buat Akun gratis Azure sebelum memulai.

Prasyarat

Mengaktifkan identitas terkelola di aplikasi

Jika Anda membuat dan memublikasikan aplikasi web melalui Visual Studio, identitas terkelola diaktifkan di aplikasi untuk Anda. Di layanan aplikasi Anda, pilih Identitas di panel kiri, lalu pilih Sistem yang ditetapkan. Verifikasikan bahwa Status diatur ke Aktif. Jika tidak, pilih Simpan lalu pilih Ya untuk mengaktifkan identitas terkelola yang ditetapkan sistem. Ketika identitas terkelola diaktifkan, status diatur ke Aktif dan ID objek tersedia.

Perhatikan nilai ID Objek, yang akan Anda perlukan di langkah berikutnya.

Screenshot that shows the system-assigned identity.

Memberikan akses ke Microsoft Graph

Saat mengakses Microsoft Graph, identitas terkelola harus memiliki izin yang tepat untuk operasi yang ingin dilakukannya. Saat ini, tidak ada opsi untuk menetapkan izin tersebut melalui pusat admin Microsoft Entra. Skrip berikut ini akan menambahkan izin API Microsoft Graph yang diminta ke objek perwakilan layanan identitas terkelola.

# 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

Setelah menjalankan skrip, Anda dapat memverifikasi di pusat admin Microsoft Entra bahwa izin API yang diminta ditetapkan ke identitas terkelola.

Buka Aplikasi, lalu pilih Aplikasi perusahaan. Panel ini menampilkan semua perwakilan layanan di penyewa Anda. Tambahkan filter untuk "Jenis aplikasi == Identitas Terkelola" dan pilih perwakilan layanan untuk identitas terkelola.

Jika Anda mengikuti tutorial ini, ada dua perwakilan layanan dengan nama tampilan yang sama (SecureWebApp2020094113531, misalnya). Perwakilan layanan yang memiliki URL Beranda mewakili aplikasi web di penyewa Anda. Perwakilan layanan yang muncul di Identitas Terkelola seharusnya tidak memiliki URL Beranda yang tercantum dan ID Objek harus cocok dengan nilai ID objek dari identitas terkelola di langkah sebelumnya.

Pilih perwakilan layanan untuk identitas terkelola.

Screenshot that shows the All applications option.

Di Ringkasan, pilih Izin, dan Anda akan melihat izin yang ditambahkan untuk Microsoft Graph.

Screenshot that shows the Permissions pane.

Memanggil Microsoft Graph

Kelas ChainedTokenCredential, ManagedIdentityCredential, dan EnvironmentCredential digunakan untuk mendapatkan kredensial token bagi kode Anda untuk mengotorisasi permintaan ke Microsoft Graph. Buat instan kelas ChainedTokenCredential, yang menggunakan identitas terkelola di lingkungan App Service atau variabel lingkungan pengembangan untuk mengambil token dan melampirkannya ke klien layanan. Contoh kode berikut mendapatkan info masuk token terautentikasi dan menggunakannya untuk membuat objek klien layanan, yang membuat pengguna berada dalam grup.

Untuk melihat kode ini sebagai bagian dari aplikasi sampel, lihat sampel di GitHub.

Instal paket pustaka klien Microsoft.Identity.Web.GraphServiceClient

Instal paket NuGet Microsoft.Graph dan Microsoft.Identity.Web.GraphServiceClient di proyek Anda dengan menggunakan antarmuka baris perintah (CLI) .NET atau Package Manager Console di Visual Studio.

.NET CLI

Buka baris perintah, dan beralih ke direktori yang memuat file proyek Anda.

Jalankan perintah instalasi.

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

Konsol Manajer Paket

Buka proyek/solusi di Visual Studio, dan buka konsol dengan menggunakan perintah Alat>Manajer Paket NuGet>Konsol Manajer Paket.

Jalankan perintah instalasi.

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

Contoh

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

Membersihkan sumber daya

Jika Anda sudah selesai dengan tutorial ini dan tidak lagi memerlukan aplikasi web atau sumber daya terkait, bersihkan sumber daya yang Anda buat.

Langkah berikutnya