Bagikan melalui


Tutorial: Memanggil API web yang dilindungi dari aplikasi daemon .NET Anda

Tutorial ini adalah bagian akhir dari seri yang menunjukkan cara memanggil API web yang dilindungi dari aplikasi daemon .NET. Di bagian 1 dari seri ini, Anda menyiapkan penyewa eksternal untuk mengotorisasi aplikasi daemon .NET. Dalam tutorial ini, Anda membuat aplikasi daemon klien dan memanggil API web yang dilindungi. Anda mengaktifkan aplikasi daemon klien untuk memperoleh token akses menggunakan identitasnya sendiri, lalu memanggil API web.

Dalam tutorial ini;

  • Konfigurasikan aplikasi daemon untuk menggunakan detail pendaftaran aplikasinya.
  • Buat aplikasi daemon yang memperoleh token atas nama sendiri dan memanggil API web yang dilindungi.

Prasyarat

Membuat aplikasi daemon .NET

  1. Buka terminal Anda dan navigasikan ke folder tempat Anda ingin proyek Anda tinggal.

  2. Inisialisasi aplikasi konsol .NET dan navigasikan ke folder akarnya.

    dotnet new console -n ToDoListClient
    cd ToDoListClient
    

Memasang paket

Instal Microsoft.Identity.Web dan Microsoft.Identity.Web.DownstreamApi paket:

dotnet add package Microsoft.Identity.Web
dotnet add package Microsoft.Identity.Web.DownstreamApi

Microsoft.Identity.Web menyediakan lem antara ASP.NET Core, middleware autentikasi, dan Microsoft Authentication Library (MSAL) untuk .NET memudahkan Anda menambahkan kemampuan autentikasi dan otorisasi ke aplikasi Anda. Microsoft.Identity.Web.DownstreamApi menyediakan antarmuka yang digunakan untuk memanggil API hilir.

Membuat file appsettings.json menambahkan konfigurasi pendaftaran

  1. Buat file appsettings.json di folder akar aplikasi.

  2. Tambahkan detail pendaftaran aplikasi ke file appsettings.json .

    {
        "AzureAd": {
            "Authority": "https://<Enter_the_Tenant_Subdomain_Here>.ciamlogin.com/",
            "ClientId": "<Enter_the_Application_Id_here>",
            "ClientCredentials": [
                {
                    "SourceType": "ClientSecret",
                    "ClientSecret": "<Enter_the_Client_Secret_Here>"
                }
            ]
        },
        "DownstreamApi": {
            "BaseUrl": "<Web_API_base_url>",
            "RelativePath": "api/todolist",
            "RequestAppToken": true,
            "Scopes": [
                "api://<Enter_the_Web_Api_Application_Id_Here>/.default"
            ]
        }
    }
    

    Ganti nilai berikut dengan nilai Anda sendiri:

    Nilai Deskripsi
    Enter_the_Application_Id_Here ID Aplikasi (klien) dari aplikasi daemon klien yang Anda daftarkan.
    Enter_the_Tenant_Subdomain_Here Subdomain Direktori (penyewa).
    Enter_the_Client_Secret_Here Nilai rahasia aplikasi daemon yang Anda buat.
    Enter_the_Web_Api_Application_Id_Here ID Aplikasi (klien) dari aplikasi API web yang Anda daftarkan.
    Web_API_base_url URL dasar API web. Misalnya, https://localhost:44351/ di mana 44351 adalah nomor port port tempat API Anda berjalan. API Anda harus sudah berjalan dan menunggu permintaan pada tahap ini agar Anda mendapatkan nilai ini.

Menambahkan model

Navigasi ke akar folder proyek Anda dan buat folder model . Di folder model, buat file ToDo.cs dan tambahkan kode berikut:

using System;

namespace ToDoListClient.Models;

public class ToDo
{
    public int Id { get; set; }
    public Guid Owner { get; set; }
    public string Description { get; set; } = string.Empty;
}

Memperoleh token akses

Anda sekarang telah mengonfigurasi item yang diperlukan untuk aplikasi daemon Anda. Dalam langkah ini, Anda menulis kode yang memungkinkan aplikasi daemon memperoleh token akses.

  1. Buka file program.cs di editor kode Anda dan hapus kontennya.

  2. Tambahkan paket Anda ke file.

    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Identity.Abstractions;
    using Microsoft.Identity.Web;
    using ToDoListClient.Models;
    
  3. Buat instans akuisisi token. GetDefaultInstance Gunakan metode TokenAcquirerFactory kelas Microsoft.Identity.Web paket untuk membangun instans akuisisi token. Secara default, instans membaca file appsettings.json jika ada di folder yang sama dengan aplikasi. GetDefaultInstance juga memungkinkan kami untuk menambahkan layanan ke koleksi layanan.

    Tambahkan baris kode ini ke file program.cs :

    var tokenAcquirerFactory = TokenAcquirerFactory.GetDefaultInstance();
    
  4. Konfigurasikan opsi aplikasi yang akan dibaca dari konfigurasi dan tambahkan DownstreamApi layanan. Layanan ini DownstreamApi menyediakan antarmuka yang digunakan untuk memanggil API hilir. Kami memanggil layanan ini DownstreamAPI di objek konfigurasi. Aplikasi daemon membaca konfigurasi API hilir dari bagian DownstreamApi dari appsettings.json. Secara default, Anda mendapatkan cache token dalam memori.

    Tambahkan cuplikan kode berikut ke file program.cs :

    const string ServiceName = "DownstreamApi";
    
    tokenAcquirerFactory.Services.AddDownstreamApi(ServiceName,
        tokenAcquirerFactory.Configuration.GetSection("DownstreamApi"));
    
    
  5. Bangun acquirer token. Ini menyusun semua layanan yang telah Anda tambahkan ke Layanan dan mengembalikan penyedia layanan. Gunakan penyedia layanan ini untuk mendapatkan akses ke sumber daya API yang telah Anda tambahkan. Dalam hal ini, Anda hanya menambahkan satu sumber daya API sebagai layanan hilir yang ingin Anda akses.

    Tambahkan cuplikan kode berikut ke file program.cs :

    var serviceProvider = tokenAcquirerFactory.Build();
    

Memanggil API web

Tambahkan kode untuk memanggil API web yang dilindungi menggunakan IDownstreamApi antarmuka . Dalam tutorial ini, Anda hanya menerapkan panggilan ke Posting todo dan satu lagi untuk Mendapatkan semua todo. Lihat implementasi lain seperti Hapus dan Masukkan kode sampel.

Tambahkan baris kode ini ke file program.cs :

var toDoApiClient = serviceProvider.GetRequiredService<IDownstreamApi>();

Console.WriteLine("Posting a to-do...");

var firstNewToDo = await toDoApiClient.PostForAppAsync<ToDo, ToDo>(
    ServiceName,
    new ToDo()
    {
        Owner = Guid.NewGuid(),
        Description = "Bake bread"
    });

await DisplayToDosFromServer();
    
async Task DisplayToDosFromServer()
{
    Console.WriteLine("Retrieving to-do's from server...");
    var toDos = await toDoApiClient!.GetForAppAsync<IEnumerable<ToDo>>(
        ServiceName,
        options => options.RelativePath = "/api/todolist"
    );
    
    if (!toDos!.Any())
    {
        Console.WriteLine("There are no to-do's in server");
        return;
    }
    
    Console.WriteLine("To-do data:");
    
    foreach (var toDo in toDos!) {
        DisplayToDo(toDo);
    }
}

void DisplayToDo(ToDo toDo) {
    Console.WriteLine($"ID: {toDo.Id}");
    Console.WriteLine($"User ID: {toDo.Owner}");
    Console.WriteLine($"Message: {toDo.Description}");
}

Menjalankan aplikasi daemon klien

Navigasi ke folder akar aplikasi daemon dan jalankan perintah berikut:

dotnet run

Jika semuanya baik-baik saja, Anda akan melihat output berikut di terminal Anda.

Posting a to-do...
Retrieving to-do's from server...
To-do data:
ID: 1
User ID: 00001111-aaaa-2222-bbbb-3333cccc4444

Message: Bake bread

Pecahkan masalah

Jika Anda mengalami kesalahan,

  • Konfirmasikan detail pendaftaran yang Anda tambahkan ke file appsettings.json.
  • Konfirmasikan bahwa Anda memanggil API web melalui port yang benar dan melalui https.
  • Konfirmasikan bahwa izin aplikasi Anda dikonfigurasi dengan benar.

Kode sampel lengkap tersedia di GitHub.

Membersihkan sumber daya

Jika Anda tidak berniat menggunakan aplikasi yang telah Anda daftarkan dan buat dalam tutorial ini, hapus aplikasi tersebut untuk menghindari timbulnya biaya apa pun.

Lihat juga