Compartir a través de


Tutorial: Implementación de un punto de conexión protegido en la API

En este tutorial, aprenderá a proteger un punto de conexión de API mediante la adición de elementos de autenticación al código fuente. La protección de un punto de conexión de API garantiza que solo se permita el acceso a los usuarios autorizados. Puede probar la API con una solicitud no autenticada para asegurarse de que la API restringe el acceso a usuarios no autorizados. La plataforma de Identidad de Microsoft ofrece una forma de proteger los puntos de conexión de las API mediante el paquete NuGet de Microsoft.Identity.Web. En este artículo;

  • Implementación de elementos de autenticación en el código fuente
  • Adición de información meteorológica para que se muestre la API
  • Prueba de la API con una solicitud GET no autenticada

Prerrequisitos

Implementación de la autorización

  1. Abra el archivo Program.cs y reemplace el contenido por el siguiente fragmento de código:

    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);
    } 
    

Prueba de la aplicación

  1. En Visual Studio, seleccione Iniciar sin depurar.

La página web http://localhost:{host} muestra una salida similar a la siguiente imagen. Esto se debe a que se llama a la API sin autenticación. Para realizar una llamada autorizada, consulte Pasos siguientes para obtener instrucciones sobre cómo acceder a una API web protegida.

Captura de pantalla que muestra el error 401 cuando se inicia la página web.

Pasos siguientes