Руководство. Реализация защищенной конечной точки в API
В этом руководстве описано, как защитить конечную точку API, добавив элементы проверки подлинности в исходный код. Защита конечной точки API гарантирует, что доступ разрешен только авторизованным пользователям. Вы можете протестировать API с помощью неавторизованного запроса, чтобы убедиться, что API ограничивает доступ к несанкционированным пользователям. Платформа удостоверений Майкрософт предоставляет способ защиты конечных точек API с помощью пакета NuGet Microsoft.Identity.Web. В этой статье вы;
- Реализация элементов проверки подлинности в исходном коде
- Добавление сведений о погоде для отображения API
- Тестирование API с помощью запроса GET без проверки подлинности
Необходимые компоненты
- Завершение предварительных требований и шагов в руководстве. Создание и настройка проекта ASP.NET Core для проверки подлинности.
Реализация авторизации
Откройте файл Program.cs и замените содержимое следующим фрагментом кода:
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); }
Тестирование приложения
- В Visual Studio выберите "Пуск" без отладки.
На веб-странице http://localhost:{host}
отображаются выходные данные, аналогичные следующему изображению. Это связано с тем, что API вызывается без проверки подлинности. Чтобы выполнить авторизованный вызов, ознакомьтесь со следующими инструкциями по тому, как получить доступ к защищенному веб-API.