Bagikan melalui


Menguji API web ASP.NET Core yang dilindungi

Berlaku untuk: Penyewa tenaga kerja (Lingkaran hijau dengan simbol tanda centang putih yang menunjukkan konten berikut berlaku untuk penyewa tenaga kerja.) Penyewa eksternal (Lingkaran hijau dengan simbol tanda centang putih yang menunjukkan konten berikut berlaku untuk penyewa eksternal.) (pelajari selengkapnya)

Tutorial ini adalah bagian akhir dari seri yang menunjukkan pembangunan dan pengujian API web yang dilindungi yang terdaftar di penyewa Microsoft Entra. Di Bagian 1 dari seri ini, Anda membuat API web ASP.NET Core dan melindungi endpoint-nya. Sekarang Anda akan membuat aplikasi daemon ringan, mendaftarkannya di penyewa Anda, dan menggunakan aplikasi daemon untuk menguji API web yang Anda buat.

Di tutorial ini, Anda akan:

  • Mendaftarkan aplikasi daemon
  • Menetapkan peran aplikasi ke aplikasi daemon Anda
  • Membangun aplikasi daemon Anda
  • Jalankan aplikasi daemon Anda untuk memanggil API web yang dilindungi

Prasyarat

Mendaftarkan aplikasi daemon

Langkah-langkah berikut menunjukkan cara mendaftarkan aplikasi daemon Anda di pusat admin Microsoft Entra:

  1. Masuk ke pusat admin Microsoft Entra setidaknya sebagai Pengembang Aplikasi.

  2. Jika Anda memiliki akses ke beberapa tenant, gunakan ikon Pengaturan di menu atas untuk beralih ke tenant eksternal Anda dari menu Direktori + langganan .

  3. Telusuri ke Entra ID>Pendaftaran Aplikasi.

  4. Pilih + Pendaftaran baru.

  5. Di halaman Daftarkan aplikasi yang muncul, masukkan informasi pendaftaran aplikasi Anda:

    1. Di bagian Nama , masukkan nama aplikasi yang bermakna yang akan ditampilkan kepada pengguna aplikasi, misalnya ciam-client-app.

    2. Di bawah Jenis akun yang didukung, pilih Akun di direktori organisasi ini saja.

  6. Pilih Daftar.

  7. Panel Gambaran Umum aplikasi ditampilkan saat pendaftaran selesai. Rekam ID Direktori (penyewa) dan ID Aplikasi (klien) yang akan digunakan dalam kode sumber aplikasi Anda.

Buat rahasia klien untuk aplikasi terdaftar. Aplikasi ini menggunakan rahasia klien untuk membuktikan identitasnya ketika meminta token:

  1. Dari halaman Pendaftaran aplikasi , pilih aplikasi yang Anda buat (seperti rahasia klien aplikasi web) untuk membuka halaman Gambaran Umumnya .
  2. Di bawah Kelola, pilih Sertifikat & rahasia>Klien Rahasia>klien baru.
  3. Dalam kotak Deskripsi , masukkan deskripsi untuk rahasia klien (misalnya, rahasia klien aplikasi web).
  4. Di bawah Kedaluwarsa, pilih durasi yang rahasianya valid (sesuai aturan keamanan organisasi Anda), lalu pilih Tambahkan.
  5. Catat Nilai rahasia. Anda menggunakan nilai ini untuk konfigurasi di langkah selanjutnya. Nilai rahasia tidak akan ditampilkan lagi, dan tidak dapat diambil dengan metode apa pun, setelah Anda berpindah dari Sertifikat dan rahasia. Pastikan Anda merekamnya.

Menetapkan peran aplikasi ke aplikasi daemon Anda

Aplikasi yang mengautentikasi sendiri tanpa pengguna memerlukan izin aplikasi (juga dikenal sebagai peran). Izin ini memungkinkan aplikasi itu sendiri untuk mengakses sumber daya secara langsung. Di sisi lain, jika kami menguji API dengan pengguna yang masuk, kami akan menetapkan izin (cakupan) yang didelegasikan. Izin yang didelegasikan memungkinkan aplikasi bertindak atas nama pengguna, terbatas pada hak akses pengguna. Ikuti langkah-langkah ini untuk menetapkan izin aplikasi ke aplikasi daemon:

  1. Dari halaman Pendaftaran aplikasi , pilih aplikasi yang Anda buat, seperti ciam-client-app.

  2. Di bawah Kelola, pilih Izin API.

  3. Di bawah Izin yang dikonfigurasi, pilih Tambahkan izin.

  4. Pilih tab API yang digunakan organisasi saya .

  5. Dalam daftar API, pilih API seperti ciam-ToDoList-api.

  6. Pilih opsi Izin aplikasi . Kami memilih opsi ini karena aplikasi masuk dengan identitasnya sendiri, namun bukan atas nama pengguna.

  7. Dari daftar izin, pilih TodoList.Read.All, ToDoList.ReadWrite.All (gunakan kotak pencarian jika perlu).

  8. Pilih tombol Tambahkan izin .

  9. Pada titik ini, Anda telah menetapkan izin dengan benar. Namun, karena aplikasi daemon tidak mengizinkan pengguna untuk berinteraksi dengannya, pengguna itu sendiri tidak dapat menyetujui izin ini. Untuk mengatasi masalah ini, Anda sebagai admin harus menyetujui izin ini atas nama semua pengguna di penyewa:

    1. Pilih Berikan persetujuan admin untuk <nama> penyewa Anda, lalu pilih Ya.
    2. Pilih Refresh, lalu verifikasi bahwa Telah diberikan untuk <nama penyewa Anda> muncul di bawah Status untuk kedua hak akses.

Membuat aplikasi daemon

  1. Inisialisasi aplikasi konsol .NET dan navigasikan ke folder akarnya:

    dotnet new console -o MyTestApp
    cd MyTestApp
    
  2. Instal MSAL.NET untuk membantu menangani autentikasi dengan menjalankan perintah berikut:

    dotnet add package Microsoft.Identity.Client
    
  3. Jalankan proyek API Anda dan catat port tempat proyek berjalan.

  4. Buka file Program.cs dan ganti kode "Halo dunia" dengan kode berikut.

    using System;
    using System.Net.Http;
    using System.Net.Http.Headers;
    
    HttpClient client = new HttpClient();
    
    var response = await client.GetAsync("http://localhost:<your-api-port>/api/todolist);
    Console.WriteLine("Your response is: " + response.StatusCode);
    

    Navigasi ke direktori akar aplikasi daemon dan jalankan aplikasi menggunakan perintah dotnet run. Kode ini mengirim permintaan tanpa token akses. Anda akan melihat string berikut: Respon Anda adalah: Tidak Sah tercetak di konsol Anda.

  5. Hapus kode di langkah 4 dan ganti dengan yang berikut ini untuk menguji API Anda dengan mengirim permintaan dengan token akses yang valid. Aplikasi daemon ini menggunakan alur kredensial klien untuk memperoleh token akses saat diautentikasi tanpa interaksi pengguna.

    using Microsoft.Identity.Client;
    using System;
    using System.Net.Http;
    using System.Net.Http.Headers;
    
    HttpClient client = new HttpClient();
    
    var clientId = "<your-daemon-app-client-id>";
    var clientSecret = "<your-daemon-app-secret>";
    var scopes = new[] {"api://<your-web-api-application-id>/.default"};
    var tenantId = "<your-tenant-id>";     //Use in workforce tenant configuration
    var tenantName = "<your-tenant-name>"; //Use in external tenant configuration
    var authority = $"https://login.microsoftonline.com/{tenantId}"; // Use "https://{tenantName}.ciamlogin.com" for external tenant configuration 
    
    var app = ConfidentialClientApplicationBuilder
        .Create(clientId)
        .WithAuthority(authority)
        .WithClientSecret(clientSecret)
        .Build();
    
    var result = await app.AcquireTokenForClient(new string[] { scopes }).ExecuteAsync();
    Console.WriteLine($"Access Token: {result.AccessToken}");
    
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
    var response = await client.GetAsync("http://localhost:/<your-api-port>/api/todolist");
    var content = await response.Content.ReadAsStringAsync();
    
    Console.WriteLine("Your response is: " + response.StatusCode);
    Console.WriteLine(content);
    
  6. Ganti placeholder dalam kode dengan ID klien aplikasi daemon, rahasia, ID aplikasi API web, dan nama tenant Anda.

    • Untuk penyewa eksternal, gunakan otoritas dalam formulir: "https://{tenantName}.ciamlogin.com/"
    • Untuk penyewa pekerja, gunakan wewenang dalam bentuk: "https://login.microsoftonline.com/{tenantId}"
  7. Navigasi ke direktori akar aplikasi daemon dan jalankan aplikasi menggunakan perintah dotnet run. Kode ini mengirimkan permintaan dengan token akses yang valid. Anda akan melihat string: Respons Anda adalah: OK dicetak di konsol Anda.