Tutoriel : Implémenter un point de terminaison protégé sur votre API
Dans ce tutoriel, vous allez apprendre à protéger un point de terminaison d’API en ajoutant des éléments d’authentification au code source. La protection d’un point de terminaison d’API garantit que seuls les utilisateurs autorisés sont autorisés à accéder. Vous pouvez tester l’API avec une demande non authentifiée pour vous assurer que votre API limite l’accès aux utilisateurs non autorisés. La plateforme d’identités Microsoft permet de protéger les points de terminaison d’API à l’aide du package NuGet Microsoft.Identity.Web. Dans cet article, vous ;
- Implémenter des éléments d’authentification dans le code source
- Ajouter des informations météorologiques pour que l’API s’affiche
- Tester l’API avec une requête GET non authentifiée
Conditions préalables
- Achèvement des prérequis et étapes de Tutoriel : Créer et configurer un projet ASP.NET Core pour l’authentification.
Implémenter l’autorisation
Ouvrez le fichier Program.cs et remplacez le contenu par l’extrait de code suivant :
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); }
Tester l’application
- Dans Visual Studio, sélectionnez Démarrer sans débogage.
La page web http://localhost:{host}
affiche une sortie similaire à l’image suivante. Cela est dû au fait que l’API est appelée sans authentification. Pour effectuer un appel autorisé, reportez-vous à étapes suivantes pour obtenir des guides pratiques sur l’accès à une API web protégée.