Вы должны быть в состоянии построить аутентификацию по умолчанию, просто соединяя схемы аутентификации.
Во-первых, вы можете реализовать собственный обработчик аутентификации:
public class CustomAuthenticationHandler : AuthenticationHandler<CustomAuthHandlerOptions>
{
public CustomAuthenticationHandler(IOptionsMonitor<CustomAuthHandlerOptions> options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock) : base(options, logger, encoder, clock)
{
}
protected override async Task<AuthenticateResult> HandleAuthenticateAsync()
{
//Write custom logic here
return await Context.AuthenticateAsync(Scheme.Name);
}
}
public class CustomAuthHandlerOptions : AuthenticationSchemeOptions
{
public string MyCustomOptionsProp { get; set; }
}
А затем вы можете добавить схему к AuthenticationBuilder
:
services.AddAuthentication()
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII
.GetBytes(Configuration.GetSection("AppSettings:Token").Value)),
ValidateIssuer = false,
ValidateAudience = false
};
})
.AddScheme<CustomAuthHandlerOptions, CustomAuthenticationHandler>("CustomAuthJwt", options =>
{
options.MyCustomOptionsProp = "Custom Value";
});
У меня нетфактически проверял это, но я знаю, что идея этого подхода работает, потому что он был реализован в IdentityServer4.AccessTokenValidation Nuget Package .Мой пример - только самая простая версия этого.