Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Por padrão, solicitações não autenticadas e não autorizadas feitas a pontos de extremidade de API conhecidos protegidos por autenticação de cookie agora resultam em 401 e 403 respostas, em vez de redirecionar para um URI de login ou acesso negado.
Os pontos de extremidade de API conhecidos são identificados usando a nova IApiEndpointMetadata interface e os metadados que implementam a nova interface foram adicionados automaticamente ao seguinte:
-
[ApiController]parâmetros de avaliação. - Pontos de extremidade de API mínimos que leem corpos de solicitação JSON ou escrevem respostas JSON.
- Pontos de extremidade usando TypedResults tipos de retorno.
- Pontos finais SignalR.
Versão introduzida
.NET 10 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 acesso negado por padrão para todas as solicitações diferentes de XMLHttpRequests (XHRs).
Novo comportamento
A partir do .NET 10, solicitações não autenticadas e não autorizadas feitas a pontos de extremidade de API conhecidos resultam em 401 e 403 respostas, em vez de redirecionarem para um URI de login ou acesso negado. Os XHRs continuam a resultar em 401 e 403 respostas, independentemente do parâmetro de avaliação final.
Tipo de mudança disruptiva
Esta alteração é de natureza comportamental .
Motivo da mudança
Esta alteração foi muito solicitada. Redirecionar solicitações não autenticadas para uma página de login 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 acesso negado para solicitações não autenticadas ou não autorizadas, independentemente do ponto de extremidade de destino ou se a origem da solicitação é um XHR, você pode substituir 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 anterior exato que evita o redirecionamento para apenas XHRs, você pode substituir os eventos com esta 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