Aracılığıyla paylaş


Öğ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

Yetkilendirme uygulama

  1. 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

  1. 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.

Web sayfası başlatıldığında 401 hatasını gösteren ekran görüntüsü.

Sonraki adımlar