Ядро ASP.NET вызывает аутентификацию - PullRequest
0 голосов
/ 25 июня 2018

Моя проблема: Найдите способ авторизовать пользователя, если необходимо, с помощью BasicAuth, если он установлен в БД для конкретного контроллера / действия, перед использованием аутентификации JWT.

Я ищу способ вызова двух разных AuthenticationHandler из пользовательского AuthenticationHandler, это вообще возможно или, возможно, я неправильно подхожу к проблеме?

protected override Task<AuthenticateResult> HandleAuthenticateAsync()
    {
        //Get the Controller/Action from this.OriginalPath            
        //Ask the DB if the Controller/Action should be authorize using
        //BasicAuth first or just use JWT
        //Call the Basic or JWT Handler
    }

1 Ответ

0 голосов
/ 25 июня 2018

Это лучшее решение, которое я нашел на данный момент:

        if (AuthType.StartsWith("Basic"))
        {
            var handlers = Context.RequestServices.GetRequiredService<IAuthenticationHandlerProvider>();
            var handler = handlers.GetHandlerAsync(Context, BasicAuthenticationDefaults.AuthenticationScheme).Result;
            var res = handler.AuthenticateAsync().Result;
            Debug.WriteLine(res.Succeeded);
            if (res.Succeeded)                
                return Task.FromResult(res);

        }
        else if(AuthType.StartsWith("Bearer"))
        {
            var handlers = Context.RequestServices.GetRequiredService<IAuthenticationHandlerProvider>();
            var handler = handlers.GetHandlerAsync(Context, JwtBearerDefaults.AuthenticationScheme).Result;
            var res = handler.AuthenticateAsync().Result;
            Debug.WriteLine(res.Succeeded);
            if (res.Succeeded)
                return Task.FromResult(res);
        }

Оно не работает с аутентификацией Windows.Я получаю только сообщение об ошибке:

Не настроен обработчик аутентификации для проверки подлинности для схемы: Windows

Но я добавил IISDefaults

services.AddAuthentication(IISDefaults.AuthenticationScheme)

Пожалуйста, не стесняйтесь комментировать или редактировать.

...