在Web API中,当用户未经身份验证而尝试访问授权资源时,需要返回HTTP 401未经授权的响应。然而,ASP.NET Core 5 Web API在这种情况下返回HTTP 404 Not Found响应,这可能会导致混淆和错误。
为了解决这个问题,我们可以通过在Startup.cs文件中添加以下代码来更改ASP.NET Core的默认身份验证行为:
services.PostConfigure(JwtBearerDefaults.AuthenticationScheme, options =>
{
options.Events = new JwtBearerEvents
{
OnChallenge = context =>
{
if (context.AuthenticateFailure != null)
{
context.Response.StatusCode = 401;
context.Response.ContentType = "application/json";
var error = JsonSerializer.Serialize(new { error = "Unauthorized" });
return context.Response.WriteAsync(error);
}
return Task.CompletedTask;
}
};
});
这段代码基于ASP.NET Core的JwtBearer身份验证方案来实现。它将在身份验证失败时触发OnChallenge事件,然后将HTTP响应状态代码设置为401,以及响应内容类型和错误消息。通过这种方式,我们可以确保未经身份验证的用户将获得正确的HTTP 401未经授权响应,而不是混淆和错误的HTTP 404 Not Found响应。