身份验证处理程序过早结束请求



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

启动.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(( 的调用?

多亏了这个和这个破解了它...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")));
}

最新更新