Asp.Net 标识:Web API 请求授权失败,返回 200 OK

本文关键字:失败 返回 OK 授权 请求 标识 Net Web API Asp | 更新日期: 2023-09-27 17:56:36

我正在加快 .NET 4.5 中 Asp.Net 标识。 我设置了一个测试应用程序,用于注册、登录并尝试调用需要"管理员"声明的 API 控制器:

[Authorize(Roles="Admin")]
public class WorkController : ApiController

当发出没有"管理员"声明的请求时,Web API 仍返回 200-OK,但 JSON 为: {Message:"Authorization has been denied for this request."}

这对我来说似乎有点奇怪,因为这并不代表成功的请求。 我期待 401 错误。 我无法找到有关如何自定义响应或返回正确状态代码的信息。我想我应该问 401 是否适合这个,或者 200 是正确的状态代码,我应该处理它?

编辑:由于某种原因,它现在返回 401。 现在我不明白如果 JSON 消息被拒绝,为什么我会更早收到 JSON 消息?

Asp.Net 标识:Web API 请求授权失败,返回 200 OK

我想通了。 当指定 OwinStartup 类的 LoginPath 时,我收到 JSON 消息。

上面

提到的文章是正确的,但是我认为它没有涵盖API由第三方应用程序调用而不是作为ajax请求调用的情况(测试查询["X-Request-With"]等)。

这是我的偏好:

在 Startup.Configuration() 或 Startup.ConfigureAuth() 中:

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
    LoginPath = new PathString("/Account/LogOn"),
    Provider = new CookieAuthenticationProvider
    {
        OnApplyRedirect = ctx =>
        {
            if (!IsApiRequest(ctx.Request))
            {
                ctx.Response.Redirect(ctx.RedirectUri);
            }
        }
    }
});
private bool IsApiRequest(IOwinRequest request)
{
    return request.Uri.AbsolutePath.StartsWith("/api");
}