【问题标题】:Unable to fail in HandleRequirementAsync在 HandleRequirementAsync 中无法失败
【发布时间】:2020-04-02 19:27:16
【问题描述】:

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

这里是:

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: 没有 authenticationScheme 指定,并且没有找到 DefaultChallengeScheme。默认 可以使用 AddAuthentication(string defaultScheme) 或 AddAuthentication(Action 配置选项)。

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

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

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

有什么想法吗?

【问题讨论】:

    标签: c# asp.net-core-3.0


    【解决方案1】:

    我将改用ActionFilter。甚至还不支持从授权处理程序设置响应的内容,所以让它正常工作毫无意义。

    【讨论】:

      猜你喜欢
      • 2020-03-31
      • 1970-01-01
      • 1970-01-01
      • 2021-11-13
      • 2011-02-15
      • 2013-08-10
      • 1970-01-01
      • 1970-01-01
      • 2016-04-28
      相关资源
      最近更新 更多