Freigeben über


Tutorial: Implementieren eines geschützten Endpunkts in Ihrer API

In diesem Tutorial lernen Sie, wie Sie einen API-Endpunkt schützen, indem Sie dem Quellcode Authentifizierungselemente hinzufügen. Wenn Sie einen API-Endpunkt schützen, stellen Sie sicher, dass nur autorisierte Benutzer Zugriff haben. Sie können die API mit einer nicht authentifizierten Anforderung testen, um sicherzustellen, dass Ihre API den Zugriff für nicht autorisierte Benutzer einschränkt. Die Microsoft Identity Platform bietet die Möglichkeit, API-Endpunkte mithilfe des NuGet-Pakets Microsoft.Identity.Web zu schützen. In diesem Artikel führen Sie folgende Schritte aus:

  • Implementieren von Authentifizierungselementen im Quellcode
  • Hinzufügen von Wetterinformationen zur Anzeige in der API
  • Testen der API mit einer nicht authentifizierten GET-Anforderung

Voraussetzungen

Autorisierung implementieren

  1. Öffnen Sie die Datei Program.cs, und ersetzen Sie den Inhalt durch den folgenden Codeschnipsel:

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

Testen der Anwendung

  1. Wählen Sie in Visual Studio Starten ohne Debuggen aus.

Die Webseite „http://localhost:{host}“ zeigt eine Ausgabe ähnlich der folgenden Abbildung an. Das liegt daran, dass die API ohne Authentifizierung aufgerufen wird. Wenn Sie einen autorisierten Anruf tätigen möchten, finden Sie unter Nächste Schritte Anleitungen zum Zugriff auf eine geschützte Web-API.

Screenshot des Fehlers 401 beim Starten der Webseite.

Nächste Schritte