Asp.Net Identity:Web Api请求授权失败,返回200 OK

时间:2014-04-04 18:51:32

标签: c# asp.net-web-api asp.net-identity

我正在加速.NET 4.5中的Asp.Net Identity。我设置了test app注册,登录并尝试拨打需要“管理员”声明的Api控制器:

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

当提出的请求没有“Admin”声明时,Web Api仍然会返回200-OK,但JSON为:{Message:"Authorization has been denied for this request."}

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

上面提到的article是正确的,但我认为它并不涵盖第三方应用程序调用API而不是ajax请求的情况(测试查询[&# 34; X-Requested-With&#34;]等。

这是我的偏好:

在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");
}