Tutorial: Implementar um ponto de extremidade protegido à sua API
Neste tutorial, você aprenderá a proteger um ponto de extremidade da API adicionando elementos de autenticação ao código-fonte. A proteção de um ponto de extremidade da API garante que apenas usuários autorizados tenham acesso permitido. 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 pontos de extremidade de API usando o pacote NuGet Microsoft.Identity.Web . Neste artigo, você;
- Implementar elementos de autenticação no código-fonte
- Adicionar informações meteorológicas para a API exibir
- Testar a API com uma solicitação GET não autenticada
Pré-requisitos
- Conclusão dos pré-requisitos e etapas em Tutorial: Criar e configurar um projeto ASP.NET Core para autenticação.
Implementar 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 a aplicação
- No Visual Studio, selecione Iniciar sem depuração.
A página http://localhost:{host}
da Web exibe uma saída semelhante à imagem a seguir. Isso ocorre porque a API está sendo chamada sem autenticação. Para fazer uma chamada autorizada, consulte Próximas etapas para obter guias de instruções sobre como acessar uma API da Web protegida.