无法在 HandleRequirementAsync 中失败

Unable to fail in HandleRequirementAsync

我有一个授权处理程序,它在成功时有效,但在...失败时失败。

这里是:

public class HeaderHandler : AuthorizationHandler<HeaderRequirement>
{
    private readonly IHttpContextAccessor _httpContextAccessor;

    public HeaderHandler(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }

    protected async override Task HandleRequirementAsync(
    AuthorizationHandlerContext context,
    HeaderRequirement requirement)
    {
        var Request = _httpContextAccessor.HttpContext.Request;

        try
        {
            var authHeader = AuthenticationHeaderValue.Parse(Request.Headers["Authorization"]);
            var credentialBytes = Convert.FromBase64String(authHeader.Parameter);
            var credentials = Encoding.UTF8.GetString(credentialBytes).Split(new[] { ':' }, 2);
            context.Succeed(requirement);

        }
        catch (Exception ex)
        {
            context.Fail();               
        }


    }


}

它是这样配置的:

services.AddAuthorization(options =>
{
    options.AddPolicy(nameof(Policy.AuthorizationHeader), //an enum of mine...
    policy => policy.Requirements.Add(new HeaderRequirement()));

});

下面是我在控制器中使用它的方式:

[Authorize(Policy = nameof(Policy.AuthorizationHeader))]
public async Task<IActionResult> CreateSpace([FromQuery] CreateSpaceViewModel viewModel)
{
    //....
}

成功时效果很好,我正在访问上面的代码。但是当处理程序失败时,我得到:

System.InvalidOperationException: No authenticationScheme was specified, and there was no DefaultChallengeScheme found. The default schemes can be set using either AddAuthentication(string defaultScheme) or AddAuthentication(Action configureOptions).

好像在失败时,我没有在 Startup.cs 中设置处理程序。它提到 authentication,即使我没有使用它...

据我所知,Authentication 是允许用户进入应用程序,Authorization 是限制已允许用户访问某些资源。

但我正在编写 API,我不关心 "application" 部分。我只想用属性装饰某些动作...就像在 .net 4.7 中一样。

有什么想法吗?

我会改用 ActionFilter。甚至还不支持从授权处理程序设置响应的内容,因此没有必要让它正常工作。