Tutorial: implementar um ponto de extremidade protegido na sua API
Neste tutorial, você aprenderá a proteger um ponto de extremidade de API adicionando elementos de autenticação ao código-fonte. A proteção de um ponto de extremidade de API garante que somente usuários autorizados tenham acesso autorizado. Você pode testar a API com uma solicitação não autenticada para garantir que sua API restrinja o acesso a usuários não autorizados. A plataforma de identidade da Microsoft fornece uma maneira de proteger os pontos de extremidade da API usando o pacote Microsoft.Identity.Web NuGet. Neste artigo, você;
- Implementar elementos de autenticação no código-fonte
- Adicione informações meteorológicas para a exibição da API
- Testar a API com uma solicitação GET não autenticada
Pré-requisitos
- Conclusão dos pré-requisitos e etapas no Tutorial: criar e configurar um projeto ASP.NET Core para autenticação.
Implementar a autorização
Abra o arquivo Program.cs e substitua o conteúdo pelo seguinte trecho:
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); }
Testar o aplicativo
- No Visual Studio, selecione Iniciar sem depurar.
A página da Web http://localhost:{host}
exibe uma saída semelhante à seguinte imagem. Isso ocorre porque a API está sendo chamada sem autenticação. Para fazer uma chamada autorizada, consulte Próximas etapas para obter as guias de instruções sobre como acessar uma API da Web protegida.