Microsoft.AspNetCore.Authorization.AuthorizeAttribute在失败时返回200OK

问题描述

我有一些与此相似的代码

[HttpGet]
[Authorize("MyCustomPolicy")]
public string TestCall()
{
    var lanId = User.GetSomeClaimOnTheUserObject() ?? "Not Found";
    return "Hello From a TestCall Get Operation.  Claim is " + lanId;
}

授权策略如下:

var myCustomPolicy = new AuthorizationPolicyBuilder()
    .RequireAuthenticatedUser()
    .AddAuthenticationSchemes("SomeScheme")
    .Build();
options.AddPolicy("MyCustomPolicy",myCustomPolicy);

当我调用它时,如果AuthenticationScheme已被满足,它将允许呼叫通过,如果未达到(如预期的那样),它将阻止呼叫。

不起作用的部分是当它阻止呼叫时,我希望返回403或401,但是我却得到了200(确定)的返回。

Authorize属性失败时,如何返回401?

解决方法

我遇到了同样的问题,在 SO 中进行了一些搜索后,我发现基本上这个 AuthorizeAttribute 将在身份验证失败时返回带有登录页面的视图,而不是给出 401。要解决这个问题,您可能想试试这个 answer或者根据您的用例搜索一些其他示例,但问题的原因基本上是相同的。