Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Por padrão, solicitações não autenticadas e não autorizadas feitas a endpoints de API conhecidos protegidos por autenticação de cookies resultam agora em respostas 401 e 403, em vez de redirecionar para um URI de logon ou de acesso negado.
Os endpoints de API conhecidos são identificados usando a interface nova IApiEndpointMetadata, e metadados que implementam a nova interface foram automaticamente adicionados ao seguinte:
-
[ApiController]Extremidade. - Endpoints mínimos de API que leem corpos de solicitação JSON ou escrevem respostas JSON.
- Pontos de extremidade usando TypedResults tipos de retorno.
- Pontos de extremidade do SignalR.
Versão introduzida
.NET 10 Versão Prévia 7
Comportamento anterior
Anteriormente, o manipulador de autenticação de cookie redirecionava solicitações não autenticadas e não autorizadas para um URI de login ou de acesso negado por padrão, exceto para solicitações do tipo XMLHttpRequests (XHRs).
Novo comportamento
A partir do .NET 10, solicitações não autenticadas e solicitações não autorizadas feitas a pontos de extremidade de API conhecidos resultam em códigos de resposta 401 e 403, em vez de redirecionar para um login ou URI de acesso negado. Os XHRs continuam a resultar em respostas 401 e 403, independentemente do ponto de extremidade de destino.
Tipo de mudança disruptiva
Esta é uma alteração comportamental.
Motivo da alteração
Essa alteração foi altamente solicitada. Redirecionar solicitações não autenticadas para uma página de logon geralmente não faz sentido para pontos de extremidade de API, que normalmente dependem de códigos de status 401 e 403 em vez de redirecionamentos HTML para comunicar falhas de autenticação.
Ação recomendada
Se você quiser sempre redirecionar para os URIs de login e de acesso negados para solicitações não autenticadas ou não autorizadas, independentemente do endpoint de destino ou de a origem da solicitação ser um XHR, você pode sobrescrever RedirectToLogin e RedirectToAccessDenied da seguinte maneira:
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;
};
});
Se você quiser reverter para o comportamento exato anterior que evita o redirecionamento especificamente para XHRs, você pode substituir os eventos com essa lógica um pouco mais complicada:
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;
};
});
APIs afetadas
-
Microsoft.AspNetCore.Http.Metadata.IApiEndpointMetadata - Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationEvents.RedirectToLogin
- Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationEvents.RedirectToAccessDenied