Sdílet prostřednictvím


Kurz: Implementace chráněného koncového bodu do rozhraní API

V tomto kurzu se dozvíte, jak chránit koncový bod rozhraní API přidáním ověřovacích prvků do zdrojového kódu. Ochrana koncového bodu rozhraní API zajišťuje, aby přístup byl povolený jenom autorizovaným uživatelům. Můžete otestovat rozhraní API s neověřeným požadavkem, abyste zajistili, že vaše rozhraní API omezuje přístup k neoprávněným uživatelům. Platforma Microsoft Identity Platform poskytuje způsob, jak chránit koncové body rozhraní API pomocí balíčku NuGet Microsoft.Identity.Web . V tomto článku, vy;

  • Implementace ověřovacích prvků do zdrojového kódu
  • Přidání informací o počasí pro zobrazení rozhraní API
  • Otestování rozhraní API s neověřeným požadavkem GET

Požadavky

Implementace autorizace

  1. Otevřete soubor Program.cs a nahraďte jeho obsah následujícím fragmentem kódu:

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

Testování aplikace

  1. V sadě Visual Studio vyberte Spustit bez ladění.

Webová stránka http://localhost:{host} zobrazí výstup podobný následujícímu obrázku. Důvodem je to, že se rozhraní API volá bez ověřování. Pokud chcete provést autorizované volání, přečtěte si další kroky s návody, jak získat přístup k chráněnému webovému rozhraní API.

Snímek obrazovky znázorňující chybu 401 při spuštění webové stránky

Další kroky