Esercitazione: Implementare un endpoint protetto nell'API
In questa esercitazione si apprenderà come proteggere un endpoint API aggiungendo elementi di autenticazione al codice sorgente. La protezione di un endpoint API garantisce che solo gli utenti autorizzati siano autorizzati ad accedere. È possibile testare l'API con una richiesta non autenticata per assicurarsi che l'API limiti l'accesso a utenti non autorizzati. La piattaforma Microsoft Identity fornisce un modo per proteggere gli endpoint API utilizzando il pacchetto NuGet Microsoft.Identity.Web. In questo articolo, tu;
- Implementare gli elementi di autenticazione nel codice sorgente
- Aggiungere informazioni meteo per l'API da mostrare
- Testare l'API con una richiesta GET non autenticata
Prerequisiti
- Completamento dei prerequisiti e dei passaggi descritti in Esercitazione: Creare e configurare un progetto ASP.NET Core per l'autenticazione.
Implementare l'autorizzazione
Aprire il file Program.cs e sostituire il contenuto con il frammento di codice seguente:
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); }
Testare l'applicazione
- Visual Studio
- di Visual Studio Code
- In Visual Studio selezionare Avvia senza eseguire il debug.
La pagina Web http://localhost:{host}
visualizza un output simile all'immagine seguente. Ciò è dovuto al fatto che l'API viene chiamata senza autenticazione. Per effettuare una chiamata autorizzata, vedere Passaggi successivi guide pratiche su come accedere a un'API Web protetta.