Bagikan melalui


Mengaktifkan autentikasi di API web Anda sendiri dengan menggunakan Azure AD B2C

Penting

Berlaku mulai 1 Mei 2025, Azure AD B2C tidak akan lagi tersedia untuk dibeli untuk pelanggan baru. Pelajari lebih lanjut di FAQ kami.

Untuk mengotorisasi akses ke API web, Anda hanya dapat melayani permintaan yang menyertakan token akses valid yang dikeluarkan oleh Azure Active Directory B2C (Azure AD B2C). Artikel ini memperlihatkan kepada Anda cara mengaktifkan otorisasi Azure AD B2C ke API web Anda. Setelah Anda menyelesaikan langkah-langkah dalam artikel ini, hanya pengguna yang mendapatkan token akses yang valid yang akan diotorisasi untuk memanggil titik akhir API web Anda.

Prasyarat

Sebelum memulai, baca salah satu artikel berikut, yang membahas cara mengonfigurasi autentikasi untuk aplikasi yang memanggil API web. Kemudian, ikuti langkah-langkah dalam artikel ini untuk mengganti api web sampel dengan API web Anda sendiri.

Gambaran Umum

Autentikasi berbasis token memastikan bahwa permintaan ke API web menyertakan token akses yang valid.

Aplikasi menyelesaikan langkah-langkah berikut:

  1. Ini mengautentikasi pengguna dengan Azure AD B2C.

  2. Ini memperoleh token akses dengan izin (cakupan) yang diperlukan untuk titik akhir API web.

  3. Ini mengirimkan token akses sebagai token pembawa di header autentikasi permintaan HTTP dengan menggunakan format ini:

    Authorization: Bearer <access token>
    

API web menyelesaikan langkah-langkah berikut:

  1. Ini membaca token pembawa dari header otorisasi dalam permintaan HTTP.

  2. Ini memvalidasi token.

  3. Ini melakukan validasi izin (cakupan) dalam token.

  4. Ini membaca klaim yang dikodekan dalam token (opsional).

  5. Ini menanggapi permintaan HTTP.

Ringkasan pendaftaran aplikasi

Untuk mengaktifkan aplikasi Anda untuk masuk dengan Azure AD B2C dan memanggil API web, Anda perlu mendaftarkan dua aplikasi di direktori Azure AD B2C.

  • Pendaftaran aplikasi web, seluler, atau SPA memungkinkan aplikasi Anda untuk masuk dengan Azure AD B2C. Proses pendaftaran aplikasi menghasilkan ID Aplikasi, juga dikenal sebagai ID klien, yang secara unik mengidentifikasi aplikasi Anda (misalnya, ID Aplikasi: 1).

  • Pendaftaran API web memungkinkan aplikasi Anda memanggil API web yang dilindungi. Pendaftaran mengekspos izin API web (cakupan). Proses pendaftaran aplikasi menghasilkan ID Aplikasi, yang secara unik mengidentifikasi API web Anda (misalnya, ID Aplikasi: 2). Berikan izin aplikasi Anda (ID Aplikasi: 1) ke cakupan API web (ID Aplikasi: 2).

Pendaftaran aplikasi dan arsitektur aplikasi dijelaskan dalam diagram berikut:

Diagram pendaftaran aplikasi dan arsitektur aplikasi untuk aplikasi dengan API web.

Menyiapkan lingkungan pengembangan Anda

Di bagian berikutnya, Anda membuat proyek API web baru. Pilih bahasa pemrograman Anda, ASP.NET Core, atau Node.js. Pastikan Anda memiliki komputer yang menjalankan salah satu perangkat lunak berikut:

Langkah 1: Membuat API web yang dilindungi

Buat proyek API web baru. Pertama, pilih bahasa pemrograman yang ingin Anda gunakan, ASP.NET Core atau Node.js.

Gunakan perintah dotnet new. Perintah dotnet new membuat folder baru bernama TodoList dengan aset proyek API web. Buka direktori, lalu buka Visual Studio Code.

dotnet new webapi -o TodoList
cd TodoList
code . 

Saat Anda diminta untuk "menambahkan aset yang diperlukan ke proyek," pilih Ya.

Langkah 2: Instal dependensi

Tambahkan pustaka autentikasi ke proyek API web Anda. Pustaka autentikasi mengurai header autentikasi HTTP, memvalidasi token, dan mengekstrak klaim. Untuk informasi selengkapnya, tinjau dokumentasi untuk pustaka.

Untuk menambahkan pustaka autentikasi, instal paket dengan menjalankan perintah berikut:

dotnet add package Microsoft.Identity.Web

Langkah 3: Memulai pustaka autentikasi

Tambahkan kode yang diperlukan untuk memulai pustaka autentikasi.

Buka Startup.cs lalu, di awal kelas, tambahkan deklarasi berikut using :

using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.Identity.Web;

Temukan fungsi ConfigureServices(IServiceCollection services). Kemudian, sebelum services.AddControllers(); baris kode, tambahkan cuplikan kode berikut:

public void ConfigureServices(IServiceCollection services)
{
    // Adds Microsoft Identity platform (Azure AD B2C) support to protect this Api
    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddMicrosoftIdentityWebApi(options =>
    {
        Configuration.Bind("AzureAdB2C", options);

        options.TokenValidationParameters.NameClaimType = "name";
    },
    options => { Configuration.Bind("AzureAdB2C", options); });
    // End of the Microsoft Identity platform block    

    services.AddControllers();
}

Temukan fungsi Configure. Kemudian, segera setelah app.UseRouting(); baris kode, tambahkan cuplikan kode berikut:

app.UseAuthentication();

Setelah perubahan, kode Anda akan terlihat seperti cuplikan berikut:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseHttpsRedirection();

    app.UseRouting();
    
    // Add the following line 
    app.UseAuthentication();
    // End of the block you add
    
    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

Langkah 4: Tambahkan titik akhir

Tambahkan dua titik akhir ke API web Anda:

  • Titik akhir anonim /public . Titik akhir ini mengembalikan tanggal dan waktu saat ini. Gunakan untuk men-debug API web Anda dengan panggilan anonim.
  • Titik akhir yang dilindungi /hello . Titik akhir ini mengembalikan nilai name klaim dalam token akses.

Untuk menambahkan titik akhir anonim:

Di bawah folder /Controllers , tambahkan file PublicController.cs , lalu tambahkan ke cuplikan kode berikut:

using System;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;

namespace TodoList.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class PublicController : ControllerBase
    {
        private readonly ILogger<PublicController> _logger;

        public PublicController(ILogger<PublicController> logger)
        {
            _logger = logger;
        }

        [HttpGet]
        public ActionResult Get()
        {
            return Ok( new {date = DateTime.UtcNow.ToString()});
        }
    }
}

Untuk menambahkan titik akhir yang dilindungi:

Di bawah folder /Controllers , tambahkan file HelloController.cs , lalu tambahkan ke kode berikut:

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Microsoft.Identity.Web.Resource;

namespace TodoList.Controllers
{
    [Authorize]
    [RequiredScope("tasks.read")]
    [ApiController]
    [Route("[controller]")]
    public class HelloController : ControllerBase
    {

        private readonly ILogger<HelloController> _logger;
        private readonly IHttpContextAccessor _contextAccessor;

        public HelloController(ILogger<HelloController> logger, IHttpContextAccessor contextAccessor)
        {
            _logger = logger;
            _contextAccessor = contextAccessor;
        }

        [HttpGet]
        public ActionResult Get()
        {
            return Ok( new { name = User.Identity.Name});
        }
    }
}

HelloController Pengontrol dihiasi dengan AuthorizeAttribute, yang membatasi akses hanya untuk pengguna yang diautentikasi.

Pengontrol juga dihiasi dengan [RequiredScope("tasks.read")]. RequiredScopeAttribute memverifikasi bahwa API web dipanggil dengan cakupan yang tepat, tasks.read.

Langkah 5: Mengonfigurasi server web

Di lingkungan pengembangan, atur API web untuk mendengarkan nomor port permintaan HTTP atau HTTPS masuk. Dalam contoh ini, gunakan port HTTP 6000 dan port HTTPS 6001. URI dasar API web akan untuk http://localhost:6000 HTTP dan https://localhost:6001 untuk HTTPS.

Tambahkan cuplikan JSON berikut ke file appsettings.json .

"Kestrel": {
    "EndPoints": {
      "Http": {
        "Url": "http://localhost:6000"
      },
      "Https": {
         "Url": "https://localhost:6001"   
        }
    }
  }

Langkah 6: Mengonfigurasi API web

Tambahkan konfigurasi ke file konfigurasi. File berisi informasi tentang penyedia identitas Azure AD B2C Anda. Aplikasi API web menggunakan informasi ini untuk memvalidasi token akses yang diteruskan aplikasi web sebagai token pembawa.

Di bawah folder akar proyek, buka file appsettings.json , lalu tambahkan pengaturan berikut:

{
  "AzureAdB2C": {
    "Instance": "https://contoso.b2clogin.com",
    "Domain": "contoso.onmicrosoft.com",
    "ClientId": "<web-api-app-application-id>",
    "SignedOutCallbackPath": "/signout/<your-sign-up-in-policy>",
    "SignUpSignInPolicyId": "<your-sign-up-in-policy>"
  },
  // More settings here
}

Dalam file appsettings.json , perbarui properti berikut ini:

Bagian Kunci Nilai
AzureAdB2C Kasus Bagian pertama dari nama penyewa Azure AD B2C Anda (misalnya, https://contoso.b2clogin.com).
AzureAdB2C Ruang Lingkup Nama lengkap penyewa Azure AD B2C Anda (misalnya, ).
AzureAdB2C ClientId ID aplikasi API web. Dalam diagram sebelumnya, ini adalah aplikasi dengan ID Aplikasi: 2. Untuk mempelajari cara mendapatkan ID pendaftaran aplikasi API web Anda, lihat Prasyarat.
AzureAdB2C IDKebijakanDaftarMasukMasuk Alur pengguna, atau kebijakan kustom. Untuk mempelajari cara mendapatkan alur atau kebijakan pengguna Anda, lihat Prasyarat.

Langkah 7: Jalankan dan uji API web

Terakhir, jalankan API web dengan pengaturan lingkungan Azure AD B2C Anda.

Di shell perintah, mulai aplikasi web dengan menjalankan perintah berikut:

 dotnet run

Anda akan melihat output berikut, yang berarti aplikasi Anda aktif dan berjalan dan siap menerima permintaan.

Now listening on: http://localhost:6000

Untuk menghentikan program, di shell perintah, pilih Ctrl+C. Anda dapat menjalankan ulang aplikasi dengan menggunakan node app.js perintah .

Petunjuk / Saran

Atau, untuk menjalankan dotnet run perintah, Anda dapat menggunakan debugger Visual Studio Code. Debugger bawaan Visual Studio Code membantu mempercepat perulangan pengeditan, kompilasi, dan debug Anda.

Buka browser dan kunjungi http://localhost:6000/public. Di jendela browser, Anda akan melihat teks berikut ditampilkan, bersama dengan tanggal dan waktu saat ini.

Langkah 8: Panggil API web dari aplikasi Anda

Cobalah untuk memanggil titik akhir API web yang dilindungi tanpa token akses. Buka browser dan kunjungi http://localhost:6000/hello. API mengembalikan pesan kesalahan HTTP yang tidak sah, mengonfirmasi bahwa API web dilindungi dengan token pembawa.

Lanjutkan mengonfigurasi aplikasi Anda untuk memanggil API web. Untuk panduan, lihat bagian Prasyarat .

Tonton video ini untuk mempelajari beberapa praktik terbaik saat Anda mengintegrasikan Azure AD B2C dengan API.

Dapatkan contoh lengkap di GitHub: