ASP Core перехватывает все запросы аутентификации

EDIT Я ищу общий способ перехвата запросов аутентификации, должен быть способ глобально настроить это, используя промежуточное ПО или события и т. д., не связанные с используемой мной инфраструктурой (IdentityServer4)

Я использую IdentityServer4 для аутентификации моего WebApi. Я ищу события для перехвата запросов аутентификации после и до аутентификации.

Мой класс запуска настроен таким образом для обработки аутентификации.

app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
{
    Authority = "http://localhost:5000",
    RequireHttpsMetadata = false,

    ApiName = "api1"
});

Я ищу событие для пост-аутентификации, чтобы я мог создать ссылку от пользователей IdentityServer4 к локальным пользователям, чтобы я мог ссылаться на внешние ключи.

Есть ли событие или простой способ подключиться к Post_Authentication_Requests и запросам аутентификации в целом, я хотел бы также сделать некоторые дополнительные журналы неудачных попыток входа в систему?


person johnny 5    schedule 20.03.2017    source источник


Ответы (1)


Да, у большинства промежуточного программного обеспечения аутентификации есть способ подключиться к соответствующим событиям аутентификации. Их можно найти здесь< /а>. Чтобы ответить на ваш вопрос, существует несколько перехватчиков событий аутентификации PRE и POST, вам нужно будет выбрать тот, который удовлетворяет вашим потребностям. пример:

app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
{
    Authority = "http://localhost:5000",
    RequireHttpsMetadata = false,

    ApiName = "api1",

    Events = new OpenIdConnectEvents() 
    {
        OnMessageReceived = async context =>
        {
            //example of a "before" event hook
        }

        OnTokenValidated = async context =>
        {
            //example of an "after" event hook
            var claimsIdentity = context.Ticket.Principal.Identity as ClaimsIdentity;
            if (claimsIdentity != null)
            {
                // Get the user's ID
                string userId = claimsIdentity.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier).Value;
            }
        }
     }
});

Вы также можете увидеть пример в репозитории примеров aspnet/Security здесь они демонстрируют, как они перехватывают неудачный запрос аутентификации, чтобы вернуть 500 (а не обычный 401)

person Lutando    schedule 20.03.2017
comment
Я пытаюсь сделать две вещи: добавить новых пользователей в свою БД, если они впервые входят в систему с IdentityServer4, я должен использовать OnTokenValidated Correct? Кроме того, я пытаюсь зарегистрировать IP-адрес попыток входа в систему, должно ли это быть событие OnMessageReceived или есть лучшее место для этого? - person johnny 5; 20.03.2017
comment
Я реализовал событие OnMessageReceived, чтобы изменить что-то вроде: = c.Request.Query[Аутентификация]; вернуть Task.CompletedTask; } }; но он никогда не входит в вызов функции при отладке. - person Harris; 22.02.2018