我在Asp.net核心项目中使用了Asp.net Identity 3(仅针对net451编译。)
这是一个问题,当我用[Authorize]标签调用WebAPI时,系统总是返回登录URL而不是401来进行未经授权的呼叫。我想知道如何让它返回401?
答案 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);
}
};
});