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

Implementar autorização

  1. 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

  1. 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.

Captura de tela que mostra o erro 401 quando a página da Web é iniciada.

Próximos passos