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 消息?
我想通了。 当指定 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");
}