Aracılığıyla paylaş


ASP.NET Core'da API uç noktası kimlik doğrulama davranışı

Kimlik doğrulaması kullanılırken cookie , API uç noktaları kimlik doğrulaması hataları için kimliği doğrulanmamış istekleri oturum açma sayfalarına yönlendirmek yerine uygun HTTP durum kodlarını (401 veya 403 gibi) döndürür. Programlı API erişimi için daha uygun olan bu davranış, .NET 10'da ASP.NET Core'da kullanıma sunulmuştur.

ASP.NET Core API uç noktalarını nasıl tanımlar?

ASP.NET Core bu davranışı api ile ilgili olarak tanıdığı uç noktalara otomatik olarak uygular, örneğin:

  • Özniteliğiyle [ApiController] dekore edilmiş denetleyiciler
  • , , , MapGetMapPostMapPutvb. ile MapDeletekaydedilen en az API uç noktası.
  • JSON yanıtlarını açıkça isteyen uç noktalar
  • SignalR hub'lar ve uç noktalar

Varsayılan davranış ve özelleştirme

varsayılan olarak ASP.NET Core, uç nokta türüne göre kimlik doğrulama mantığını uygular cookie :

  • Web sayfaları: Oturum açma sayfalarına yeniden yönlendirme
  • API uç noktaları: Yeniden yönlendirmeler olmadan 401 veya 403 durum kodları döndürme

Davranışı yapılandırma

Varsayılan davranış çoğu senaryo için geçerli olsa da, gerekirse özelleştirilebilir:

builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        options.LoginPath = "/Account/Login";
        // The framework automatically handles API endpoints
        // No additional configuration needed
    });

Belirli uç noktalar için otomatik algılamayı geçersiz kılmanız gerekiyorsa, özniteliğini [Authorize] belirli kimlik doğrulama düzenleriyle kullanın veya özel kimlik doğrulama işleyicileri uygulayın.

Geçişle ilgili dikkat edilmesi gerekenler

.NET 10'da sunulan bu davranış değişikliği, mevcut uygulamalar için hataya neden olmayacak şekilde tasarlanmıştır:

  • Web uygulamaları: Oturum açma sayfası yeniden yönlendirmeleriyle daha önce olduğu gibi çalışmaya devam edin
  • Karma uygulamalar: Web sayfaları yeniden yönlendirmeleri alırken API uç noktaları düzgün durum kodları alır
  • Yalnızca API uygulamaları: Ek yapılandırma olmadan uygun HTTP durum kodlarından yararlanın

API uç noktalarınızı test etme

ASP.NET Core 10'a yükselttikten sonra API uç noktalarınızın uygun durum kodları döndürdüğünü doğrulayın:

[Test]
public async Task UnauthorizedApiRequest_Returns401()
{
    var response = await client.GetAsync("/api/secure-data");
    Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode);
    Assert.False(response.Headers.Location != null); // No redirect
}