Объедините аутентификацию ADFS и канал передачи JWT в приложении ASP. Net - PullRequest
1 голос
/ 18 февраля 2020

У меня есть веб-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, но я не смог ее найти. Я хотел бы знать, возможно ли это достичь, и если да, я буду очень признателен, если кто-то может дать мне указатель.

1 Ответ

0 голосов
/ 18 февраля 2020

По этому вопросу:

Я хочу объединить аутентификацию ADFS с JWT Bearer таким образом, чтобы, если введенный адрес электронной почты был связан с доменом моей компании, таким как "email@mycompany.com", он аутентифицируется по ADFS и, если это какой-либо другой адрес электронной почты, использует аутентификацию JWT Bearer.

Насколько я знаю, это возможно.

Вы пробовали Microsoft Identity Platform? Это специальный c Azure SDK для управления удостоверениями, включая поддержку ADFS 3.0 в Windows Server 2012 и более поздних версиях. Его также проще использовать, поскольку эта платформа идентификации MIcrosoft использует OpenIDConnect с OAuth 2.0, поэтому вы можете использовать ADFS с носителем JWT.

Это официальная страница документации: https://docs.microsoft.com/en-us/azure/active-directory/develop/

На целевой странице есть несколько примеров для начала. Поскольку вы используете. NET Core, в пакете Microsoft Identity Platform SDK есть образец, который можно использовать в качестве примера. NET Core: https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-v2-aspnet-core-webapp

Это github репозиторий, содержащий различные примеры помимо этого учебного пособия: https://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2

ОБНОВЛЕНИЕ 1: текущая документация ADFS в Windows Server 2016 показывает только поддержку OAuth2 / OpenIDConnect и использует JWT Носитель: https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/development/ad-fs-openid-connect-oauth-concepts

Я искал конкретную c «Аутентификацию по токену носителя ADFS» в официальной документации MS, и она вообще недоступна. Вся текущая версия do c упоминает об ADFS 3.0 и более поздних версиях (включая ADFS в Windows Server 2016 и 2019), использующих OAuth2 / OpenIDConnect.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...