В первом AuthenticationHandler вы должны создать заявки, поместить их в AuthenticationTicket
и вернуть:
protected override async Task<AuthenticateResult> HandleAuthenticateAsync()
{
var claims = new[] { new Claim(ClaimTypes.Name, "nanyu") };
var identity = new ClaimsIdentity(claims, Scheme.Name);
var principal = new ClaimsPrincipal(identity);
var ticket = new AuthenticationTicket(principal, Scheme.Name);
return AuthenticateResult.Success(ticket);
}
Вы можете написать пользовательское промежуточное ПО, которое вручную вызывает AuthenticateAsync () и создает ClaimsPrincipal, содержащий все необходимые вам удостоверения:
app.UseAuthentication();
app.Use(async (context, next) =>
{
var principal = new ClaimsPrincipal();
var result1 = await context.AuthenticateAsync("MyScheme");
if (result1?.Principal != null)
{
principal.AddIdentities(result1.Principal.Identities);
}
var result2 = await context.AuthenticateAsync("MyScheme2");
if (result2?.Principal != null)
{
principal.AddIdentities(result2.Principal.Identities);
}
context.User = principal;
await next();
});
Настройка аутентификации:
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = "MyScheme";
options.DefaultChallengeScheme = "MyScheme";
})
.AddCustomAuth(o => { }).AddCustomAuthTwo(o => { });
CustomAuthExtensions.cs
:
public static class CustomAuthExtensions
{
public static AuthenticationBuilder AddCustomAuth(this AuthenticationBuilder builder, Action<CustomAuthOptions> configureOptions)
{
return builder.AddScheme<CustomAuthOptions, CustomAuthHandler>("MyScheme", "MyAuth", configureOptions);
}
public static AuthenticationBuilder AddCustomAuthTwo(this AuthenticationBuilder builder, Action<CustomAuthOptionsTwo> configureOptions)
{
return builder.AddScheme<CustomAuthOptionsTwo, CustomAuthHandlerTwo>("MyScheme2", "MyAuth2", configureOptions);
}
}