Bagikan melalui


Tutorial: Menerapkan titik akhir yang dilindungi ke API Anda

Dalam tutorial ini, Anda mempelajari cara melindungi titik akhir API dengan menambahkan elemen autentikasi ke kode sumber. Melindungi titik akhir API memastikan bahwa hanya pengguna yang berwenang yang diizinkan aksesnya. Anda dapat menguji API dengan permintaan yang tidak diabaikan untuk memastikan bahwa API Anda membatasi akses ke pengguna yang tidak sah. platform identitas Microsoft menyediakan cara untuk melindungi titik akhir API dengan menggunakan paket Microsoft.Identity.Web NuGet. Dalam artikel ini, Anda;

  • Menerapkan elemen autentikasi ke kode sumber
  • Menambahkan informasi cuaca untuk API yang akan ditampilkan
  • Menguji API dengan permintaan GET yang tidak diathentikasi

Prasyarat

Menerapkan otorisasi

  1. Buka file Program.cs dan ganti konten dengan cuplikan berikut:

    using Microsoft.AspNetCore.Authentication.JwtBearer;
    using Microsoft.AspNetCore.Authorization;
    using Microsoft.Identity.Web;
    
    var builder = WebApplication.CreateBuilder(args);
    builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddMicrosoftIdentityWebApi(options =>
            {
                builder.Configuration.Bind("AzureAd", options);
                options.TokenValidationParameters.NameClaimType = "name";
            }, options => { builder.Configuration.Bind("AzureAd", options); });
    
        builder.Services.AddAuthorization(config =>
        {
            config.AddPolicy("AuthZPolicy", policyBuilder =>
                policyBuilder.Requirements.Add(new ScopeAuthorizationRequirement() { RequiredScopesConfigurationKey = $"AzureAd:Scopes" }));
        });
    
    // Add services to the container.
    builder.Services.AddRazorPages();
    
    var app = builder.Build();
    
    app.UseAuthentication();
    app.UseAuthorization();
    
    var weatherSummaries = new[]
        {
            "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
        };
    
    app.MapGet("/weatherforecast", [Authorize(Policy = "AuthZPolicy")] () =>
        {
            var forecast = Enumerable.Range(1, 5).Select(index =>
                new WeatherForecast
                (
                    DateTime.Now.AddDays(index),
                    Random.Shared.Next(-20, 55),
                    weatherSummaries[Random.Shared.Next(weatherSummaries.Length)]
                ))
                .ToArray();
            return forecast;
        })
        .WithName("GetWeatherForecast");
    
    // Configure the HTTP request pipeline.
    if (!app.Environment.IsDevelopment())
    {
        app.UseExceptionHandler("/Error");
        // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
        app.UseHsts();
    }
    
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    
    app.UseRouting();
    
    app.UseAuthorization();
    
    app.MapRazorPages();
    
    app.Run();
    
    record WeatherForecast(DateTime Date, int TemperatureC, string? Summary)
    {
        public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
    } 
    

Uji aplikasi

  1. Di Visual Studio, pilih Mulai tanpa penelusuran kesalahan.

Halaman http://localhost:{host} web menampilkan output yang mirip dengan gambar berikut. Ini karena API dipanggil tanpa autentikasi. Untuk melakukan panggilan resmi, lihat Langkah berikutnya untuk panduan cara mengakses API web yang dilindungi.

Cuplikan layar yang memperlihatkan kesalahan 401 saat halaman web diluncurkan.

Langkah berikutnya