У меня есть веб-API, написанный на ASP. NET, и интерфейс, написанный на Angular. Аутентификация на стороне API может быть настроена для использования Windows Аутентификация, Аутентификация ADFS или JWT Bearer. Но для конкретного развертывания поддерживается только один тип аутентификации.
Для аутентификации ADFS я использую angular -oauth2-oid c на стороне Angular.
На стороне API я настраиваю аутентификацию ADFS в файле startup.cs .
public void ConfigureAuth(IAppBuilder app)
{
app.UseActiveDirectoryFederationServicesBearerAuthentication
(new ActiveDirectoryFederationServicesBearerAuthenticationOptions
{
BackchannelCertificateValidator = new CertificateValidator(),
MetadataEndpoint = System.Configuration.ConfigurationManager.AppSettings["ida:ADFSMetadata"],
TokenValidationParameters = new TokenValidationParameters()
{
ValidAudience = System.Configuration.ConfigurationManager.AppSettings["ida:Audience"],
ValidIssuer = System.Configuration.ConfigurationManager.AppSettings["ida:ValidIssuer"]
},
Provider = new OAuthBearerAuthenticationProvider()
{
OnValidateIdentity = async context =>
{
var identity = context.Ticket.Identity;
var emailAddress = identity.FindFirst(ClaimTypes.Email).Value;
using (AuthRepository repo = new AuthRepository())
{
var userManager = repo.GetUserManager();
var aspNetUser = userManager.FindByEmailAsync(emailAddress).GetAwaiter().GetResult();
if (aspNetUser != null)
{
identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, aspNetUser.Id));
await ProfileManager.AddClaimsToIdentity(identity, aspNetUser.SelectedProfile);
}
}
}
}
});
}
Я хочу объединить аутентификацию ADFS с JWT Bearer таким образом, что, если введенный адрес электронной почты связан с доменом моей компании, таким как "email@mycompany.com", он аутентифицируется по ADFS, а если это любой другой адрес электронной почты, он использует аутентификацию JWT Bearer.
Я знаю, что различные типы аутентификаций могут быть объединены в ASP. NET Core (пример здесь ), но мой API не построен с использованием Core.
Я попытался найти та же функция для ASP. NET, но я не смог ее найти. Я хотел бы знать, возможно ли это достичь, и если да, я буду очень признателен, если кто-то может дать мне указатель.