Tutorial: Akses Microsoft Graph dari aplikasi .NET 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.

  1. Di layanan aplikasi Anda, pilih Identitas di panel kiri, lalu pilih Sistem yang ditetapkan.

  2. 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.

  3. 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.

  1. Jalankan skrip berikut untuk menambahkan izin API Microsoft Graph yang diminta ke objek utama layanan identitas terkelola.

    # 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. Setelah menjalankan skrip, Anda dapat memverifikasi di pusat admin Microsoft Entra bahwa izin API yang diminta ditetapkan ke identitas terkelola.

  3. 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.

  4. Pilih perwakilan layanan untuk identitas terkelola.

    Screenshot that shows the All applications option.

  5. 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 contoh, lihat:

Pasang paket pustaka klien Microsoft.Identity.Web.MicrosoftGraph

Pasang paket Microsoft.Identity.Web.MicrosoftGraph NuGet di proyek Anda dengan menggunakan antarmuka baris perintah .NET Core atau Konsol Manajer Paket di Visual Studio.

Baris perintah .NET Core

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

Jalankan perintah instalasi.

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

Contoh .NET

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.

Hapus grup sumber daya

Di portal Microsoft Azure, pilih Grup sumber daya dari menu portal dan pilih grup sumber daya yang berisi layanan aplikasi dan paket layanan aplikasi Anda.

Pilih Hapus grup sumber daya untuk menghapus grup sumber daya dan semua sumber daya.

Screenshot that shows deleting the resource group.

Perintah ini mungkin memerlukan waktu beberapa menit untuk dijalankan.

Langkah berikutnya

Dalam tutorial ini, Anda 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.

Pelajari cara menghubungkan aplikasi .NET Core, aplikasi Python, aplikasi Java, atau aplikasi Node.js ke database.