Självstudie: Implementera en skyddad slutpunkt i ditt API
I den här självstudien får du lära dig hur du skyddar en API-slutpunkt genom att lägga till autentiseringselement i källkoden. Att skydda en API-slutpunkt säkerställer att endast behöriga användare får åtkomst. Du kan testa API:et med en oautentiserad begäran för att säkerställa att ditt API begränsar åtkomsten till obehöriga användare. Med Microsofts identitetsplattform kan du skydda API-slutpunkter med hjälp av NuGet-paketet Microsoft.Identity.Web. I den här artikeln, du;
- Implementera autentiseringselement i källkoden
- Lägga till väderinformation för API:et som ska visas
- Testa API:et med en oautentiserad GET-begäran
Förutsättningar
- Slutförande av förutsättningarna och stegen i Självstudie: Skapa och konfigurera ett ASP.NET Core-projekt för autentisering.
Implementera auktorisering
Öppna filen Program.cs och ersätt innehållet med följande kodfragment:
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); }
Testa programmet
- I Visual Studio väljer du Starta utan felsökning.
Webbsidan http://localhost:{host}
visar utdata som liknar följande bild. Det beror på att API:et anropas utan autentisering. Information om hur du får åtkomst till ett skyddat webb-API finns i Nästa steg för att göra ett auktoriserat anrop.