首页 > 解决方案 > Microsoft.AspNetCore.Authorization.AuthorizeAttribute 在失败时返回 200 (OK)

问题描述

我有一些类似的代码:

[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(OK)。

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

标签: securityasp.net-coreauthorizationasp.net-core-3.1

解决方案


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


推荐阅读