Öğretici: API'nize korumalı uç nokta uygulama
Bu öğreticide, kaynak koda kimlik doğrulama öğeleri ekleyerek API uç noktasını korumayı öğreneceksiniz. API uç noktasının korunması, yalnızca yetkili kullanıcılara erişim izninin olmasını sağlar. API'nizin yetkisiz kullanıcılara erişimi kısıtlamasını sağlamak için kimliği doğrulanmamış bir istekle API'yi test edebilirsiniz. Microsoft kimlik platformu, Microsoft.Identity.Web NuGet paketini kullanarak API uç noktalarını korumanın bir yolunu sağlar. Bu makalede, siz;
- Kaynak koda kimlik doğrulama öğeleri uygulama
- GÖRÜNTÜLENECEK API için hava durumu bilgileri ekleme
- Kimliği doğrulanmamış get isteğiyle API'yi test edin
Önkoşullar
- Öğretici: Kimlik doğrulaması için ASP.NET Core projesi oluşturma ve yapılandırma altındaki önkoşulların ve adımların tamamlanması.
Yetkilendirme uygulama
Program.cs dosyasını açın ve içeriğini aşağıdaki kod parçacığıyla değiştirin:
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); }
Uygulamayı test etme
- Visual Studio'da Hata ayıklama olmadan başlat'ı seçin.
Web sayfasında http://localhost:{host}
aşağıdaki görüntüye benzer bir çıkış görüntülenir. Bunun nedeni API'nin kimlik doğrulaması olmadan çağrılmasıdır. Yetkili bir çağrı yapmak için, korumalı bir web API'sine erişme hakkında nasıl yapılır kılavuzları için sonraki adımlar bölümüne bakın.