我正在尝试使用一些自定义逻辑创建.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()的调用?
答案 0 :(得分:0)
由于this和this而破解了... ... 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")));
}