Bagikan melalui


API web yang dilindungi: Konfigurasi kode

Untuk mengonfigurasi kode untuk API web yang dilindungi, pahami:

  • Apa yang mendefinisikan API sebagai dilindungi.
  • Cara mengonfigurasi token pembawa.
  • Cara memvalidasi token.

Apa yang mendefinisikan ASP.NET dan ASP.NET Core API sebagai dilindungi?

Seperti aplikasi web, api web ASP.NET dan ASP.NET Core dilindungi karena tindakan pengontrolnya diawali dengan atribut [Otorisasi ]. Tindakan pengontrol hanya dapat dipanggil jika API dipanggil dengan identitas yang sah.

Pertimbangkan pertanyaan-pertanyaan berikut:

  • Hanya aplikasi dapat memanggil API web. Bagaimana cara API mengetahui identitas aplikasi yang memanggilnya?
  • Jika aplikasi memanggil API atas nama pengguna, apa identitas pengguna?

Token pembawa

Token pembawa yang diatur di dalam header saat aplikasi itu dipanggil menyimpan informasi tentang identitas aplikasi. Token ini juga menyimpan informasi tentang pengguna kecuali aplikasi web menerima panggilan layanan ke layanan dari aplikasi daemon.

Berikut ini adalah contoh kode C# yang menunjukkan klien yang memanggil API setelah memperoleh token dengan Microsoft Authentication Library for .NET (MSAL.NET):

var scopes = new[] {$"api://.../access_as_user"};
var result = await app.AcquireToken(scopes)
                      .ExecuteAsync();

httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);

// Call the web API.
HttpResponseMessage response = await _httpClient.GetAsync(apiUri);

Penting

Aplikasi klien meminta token pembawa ke platform identitas Microsoft untuk API web. API adalah satu-satunya aplikasi yang harus memverifikasi token dan melihat klaim yang dikandungnya. Aplikasi klien tidak boleh mencoba memeriksa klaim yang ada di dalam token.

Di masa mendatang, API web mungkin mengharuskan token dienkripsi. Persyaratan ini akan mencegah akses untuk aplikasi klien yang dapat melihat token akses.

Konfigurasi JwtBearer

Bagian ini menjelaskan cara mengonfigurasi token pembawa.

File konfigurasi

Anda perlu menentukan satu-satunya TenantId jika Anda ingin menerima token akses dari satu penyewa (aplikasi lini bisnis). Jika tidak, itu dapat dibiarkan sebagai common. Nilai yang berbeda dapat berupa:

  • GUID (ID Penyewa = ID Direktori)
  • common dapat berupa akun organisasi dan pribadi apa pun
  • organizations dapat menjadi organisasi apa pun
  • consumers adalah akun pribadi Microsoft
{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "ClientId": "Enter_the_Application_(client)_ID_here",
    "TenantId": "common"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
}

Menggunakan URI ID Aplikasi kustom untuk API web

Jika Anda telah menerima URI ID Aplikasi yang diusulkan oleh portal Microsoft Azure, Anda tidak perlu menentukan audiens (lihat URI ID Aplikasi dan cakupan). Jika tidak, Anda harus menambah properti Audience yang nilainya adalah URI ID Aplikasi untuk API web Anda. Ini biasanya dimulai dengan api://.

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "ClientId": "Enter_the_Application_(client)_ID_here",
    "TenantId": "common",
    "Audience": "Enter_the_Application_ID_URI_here"
  },
}

Inisialisasi kode

Ketika aplikasi dipanggil pada tindakan pengontrol yang memegang atribut [Authorize], ASP.NET dan ASP.NET Core mengekstrak token akses dari token pembawa header Otorisasi. Token akses kemudian diteruskan ke middleware JwtBearer, yang memanggil Microsoft IdentityModel Extensions for .NET.

Microsoft.Identity.Web

Microsoft menyarankan Anda menggunakan paket Microsoft.Identity.Web NuGet saat mengembangkan API web dengan ASP.NET Core.

Microsoft.Identity.Web menyediakan perekat antara ASP.NET Core, middleware autentikasi, dan Microsoft Authentication Library (MSAL) untuk .NET. Ini memungkinkan pengalaman pengembang yang lebih jelas dan lebih kuat dan memanfaatkan kekuatan platform identitas Microsoft dan Azure AD B2C.

ASP.NET untuk .NET 6.0

Untuk membuat proyek API web baru yang menggunakan Microsoft.Identity.Web, gunakan templat proyek di CLI .NET 6.0 atau Visual Studio.

CLI dotnet core

# Create new web API that uses Microsoft.Identity.Web
dotnet new webapi --auth SingleOrg

Visual Studio - Untuk membuat proyek API web di Visual Studio, pilih File>Baru>Proyek>ASP.NET Core Web API.

Templat proyek .NET CLI dan Visual Studio membuat file Program.cs yang terlihat mirip dengan cuplikan kode ini. Perhatikan Microsoft.Identity.Web menggunakan direktif dan baris yang berisi autentikasi dan otorisasi.

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

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd"));

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.UseAuthentication();
app.UseAuthorization();

app.MapControllers();

app.Run();