Asp.net Identity 3返回403未授权请求,而不是重定向WebAPI调用

时间:2016-05-23 21:53:12

标签: asp.net asp.net-identity-3

我在Asp.net核心项目中使用了Asp.net Identity 3(仅针对net451编译。)

这是一个问题,当我用[Authorize]标签调用WebAPI时,系统总是返回登录URL而不是401来进行未经授权的呼叫。我想知道如何让它返回401?

3 个答案:

答案 0 :(得分:3)

在startup.cs

中证明了这一点

services.AddIdentity<ApplicationUser, IdentityRole>()

更改为以下代码将解决此问题。

        services.AddIdentity<ApplicationUser, IdentityRole>(options =>
            {
                options.Cookies.ApplicationCookie.Events = new CookieAuthenticationEvents
                {
                    OnRedirectToAccessDenied = context => {
                        context.Response.StatusCode = 403;
                        return Task.FromResult(0);
                    },
                    OnRedirectToLogin = context =>
                    {
                        context.Response.StatusCode = 401;
                        return Task.FromResult(0);
                    }
                };
                options.Cookies.ApplicationCookie.AutomaticAuthenticate = true;
            })

答案 1 :(得分:2)

您的重定向是因为ApplicationCookie默认将AutomaticChallenge设置为true

为防止重定向使用:

options.Cookies.ApplicationCookie.AutomaticChallenge = false;

答案 2 :(得分:1)

maxisam的回答很有帮助,但情况又变了。 Cookies上没有IdentityOptions属性,但是,这可行:

services.ConfigureApplicationCookie(options =>
{
    options.Events = new CookieAuthenticationEvents
    {
        OnRedirectToAccessDenied = context =>
        {
            context.Response.StatusCode = 403;
            return Task.FromResult(0);
        },
        OnRedirectToLogin = context =>
        {
            context.Response.StatusCode = 401;
            return Task.FromResult(0);
        }
    };
});