Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Varsayılan olarak, tanımlama bilgisi kimlik doğrulamasıyla korunan bilinen API uç noktalarına yapılan kimliği doğrulanmamış ve yetkisiz istekler artık oturum açma veya erişim reddi URI'sine yönlendirmek yerine 401 ve 403 yanıtlarıyla sonuçlanır.
Bilinen API uç noktaları yeni arabirim kullanılarak tanımlanır ve yeni IApiEndpointMetadata arabirimi uygulayan meta veriler aşağıdakilere otomatik olarak eklenir:
-
[ApiController]Bitiş noktası. - JSON istek gövdelerini okuyan veya JSON yanıtları yazan en düşük API uç noktaları.
- TypedResults dönüş türlerini kullanan uç noktalar.
- SignalR uç noktaları.
Sürüm kullanıma sunulmuştur
.NET 10 Preview 7
Önceki davranış
Daha önce çerez kimlik doğrulama işleyicisi, XMLHttpRequests (XHRs) dışındaki tüm istekler için kimliği doğrulanmamış ve yetkisiz istekleri varsayılan olarak oturum açma veya erişim reddedildiğinde URI'ye yönlendiriyordu.
Yeni davranış
.NET 10'dan başlayarak, bilinen API uç noktalarına yapılan kimliği doğrulanmamış ve yetkisiz istekler, oturum açma veya erişim reddi URI'sine yönlendirmek yerine 401 ve 403 yanıtlarıyla sonuçlanır. XHD'ler hedef uç nokta ne olursa olsun 401 ve 403 yanıtlarıyla sonuçlanır.
Kesinti yaratan değişiklik türü
Bu değişiklik davranışsal bir değişikliktir.
Değişiklik nedeni
Bu değişiklik çok istendi. Kimliği doğrulanmamış istekleri oturum açma sayfasına yönlendirmek genellikle kimlik doğrulama hatalarını iletmek için HTML yeniden yönlendirmeleri yerine 401 ve 403 durum kodlarını kullanan API uç noktaları için anlamlı değildir.
Önerilen eylem
tr-TR: İstek hedef uç noktasından veya kaynağının XHR olmasından bağımsız olarak, kimliği doğrulanmamış veya yetkisiz talepler için her zaman oturum açma ve erişim reddedilme URI'lerine yönlendirmek istiyorsanız, RedirectToLogin ve RedirectToAccessDenied öğelerini aşağıdaki gibi geçersiz kılabilirsiniz.
builder.Services.AddAuthentication()
.AddCookie(options =>
{
options.Events.OnRedirectToLogin = context =>
{
context.Response.Redirect(context.RedirectUri);
return Task.CompletedTask;
};
options.Events.OnRedirectToAccessDenied = context =>
{
context.Response.Redirect(context.RedirectUri);
return Task.CompletedTask;
};
});
Yalnızca XHR'ler için yönlendirmeyi engelleyen önceki davranışı tam olarak geri yüklemek istiyorsanız, olayları biraz daha karmaşık bir mantıkla geçersiz kılabilirsiniz:
builder.Services.AddAuthentication()
.AddCookie(options =>
{
bool IsXhr(HttpRequest request)
{
return string.Equals(request.Query[HeaderNames.XRequestedWith], "XMLHttpRequest", StringComparison.Ordinal) ||
string.Equals(request.Headers.XRequestedWith, "XMLHttpRequest", StringComparison.Ordinal);
}
options.Events.OnRedirectToLogin = context =>
{
if (IsXhr(context.Request))
{
context.Response.Headers.Location = context.RedirectUri;
context.Response.StatusCode = 401;
}
else
{
context.Response.Redirect(context.RedirectUri);
}
return Task.CompletedTask;
};
options.Events.OnRedirectToAccessDenied = context =>
{
if (IsXhr(context.Request))
{
context.Response.Headers.Location = context.RedirectUri;
context.Response.StatusCode = 403;
}
else
{
context.Response.Redirect(context.RedirectUri);
}
return Task.CompletedTask;
};
});
Etkilenen API'ler
-
Microsoft.AspNetCore.Http.Metadata.IApiEndpointMetadata - Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationEvents.RedirectToLogin
- Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationEvents.RedirectToAccessDenied