Udostępnij za pośrednictwem


Samouczek: implementowanie chronionego punktu końcowego do interfejsu API

Z tego samouczka dowiesz się, jak chronić punkt końcowy interfejsu API, dodając elementy uwierzytelniania do kodu źródłowego. Ochrona punktu końcowego interfejsu API gwarantuje, że tylko autoryzowani użytkownicy będą mieć dostęp. Interfejs API można przetestować za pomocą nieuwierzytelnionego żądania, aby upewnić się, że interfejs API ogranicza dostęp do nieautoryzowanych użytkowników. Platforma tożsamości Microsoft umożliwia ochronę punktów końcowych interfejsu API przy użyciu pakietu NuGet Microsoft.Identity.Web. W tym artykule;

  • Implementowanie elementów uwierzytelniania w kodzie źródłowym
  • Dodawanie informacji o pogodzie dla interfejsu API w celu wyświetlenia
  • Testowanie interfejsu API przy użyciu nieuwierzytelnionego żądania GET

Wymagania wstępne

Implementowanie autoryzacji

  1. Otwórz plik Program.cs i zastąp zawartość następującym fragmentem kodu:

    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);
    } 
    

Testowanie aplikacji

  1. W programie Visual Studio wybierz pozycję Rozpocznij bez debugowania.

Na stronie http://localhost:{host} internetowej zostaną wyświetlone dane wyjściowe podobne do poniższej ilustracji. Dzieje się tak, ponieważ interfejs API jest wywoływany bez uwierzytelniania. Aby wykonać autoryzowane wywołanie, zobacz Następne kroki , aby zapoznać się z instrukcjami dotyczącymi uzyskiwania dostępu do chronionego internetowego interfejsu API.

Zrzut ekranu przedstawiający błąd 401 po uruchomieniu strony internetowej.

Następne kroki