AuthenticationHandler提前结束请求

时间:2017-08-22 20:30:26

标签: asp.net-core

我正在尝试使用一些自定义逻辑创建.net核心AuthenticationHandler。每当我向页面发出请求时,auth处理程序中的所有内容都运行良好,但它返回200而不实际执行我的终端控制器的代码。我把它简化为这个简化版本。

Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication("Dummy")
        .AddScheme<AuthenticationSchemeOptions, DummyAuthHandler>("Dummy", null);
    ...

我的经纪人:

public class DummyAuthHandler : AuthenticationHandler<AuthenticationSchemeOptions>
{
    public DummyAuthHandler(IOptionsMonitor<AuthenticationSchemeOptions> options, 
        ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock) : 
            base(options, logger, encoder, clock)
    {
    }

    protected override Task<AuthenticateResult> HandleAuthenticateAsync()
        => Task.FromResult(AuthenticateResult.Success(
               new AuthenticationTicket(new ClaimsPrincipal(), "Dummy")));

    protected override Task HandleChallengeAsync(AuthenticationProperties properties)  
        => Task.CompletedTask;
}

我想我错过了告诉框架继续处理请求所需的方法之一,而不是仅仅认为我的身份验证处理程序想要重定向页面。也许我甚至需要在某处添加对next()的调用?

1 个答案:

答案 0 :(得分:0)

由于thisthis而破解了... ... ClaimsIdentity返回IsAuthenticated = False,这就是为什么我认为我首先需要HandleChallengeAsync。这是固定处理程序的样子:

public class DummyAuthHandler : AuthenticationHandler<AuthenticationSchemeOptions>
{
    public DummyAuthHandler(IOptionsMonitor<AuthenticationSchemeOptions> options, 
        ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock) : 
            base(options, logger, encoder, clock)
    {
    }

    protected override Task<AuthenticateResult> HandleAuthenticateAsync()
        => Task.FromResult(AuthenticateResult.Success(
               new AuthenticationTicket(new ClaimsPrincipal(
                   new ClaimsIdentity("abc")), "Dummy")));
}