Как добавить журнал аудита с IdentityServer

Мы создаем службу токенов безопасности с использованием IdentityServer4. Из-за требований аудита мы хотели бы регистрировать каждую успешную (и неудачную) попытку входа в систему вместе с информацией о выпущенном токене, в частности: что утверждает, что токен включает.

Наиболее очевидная часть, кажется, включает (часть) события типы, предоставленные в IdentityServer, и создают пользовательский приемник событий, где можно обработать успешный и неудачный вход в систему (например, зарегистрировать в базе данных).

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

Таким образом, возникает вопрос: где, если это вообще возможно, было бы правильным / лучшим местом для подключения к IdentityServer i, чтобы добиться ведения журнала аудита выпущенных токенов?


person Julian    schedule 20.02.2019    source источник
comment
Это должно быть легко выполнено путем расширения служб сервера идентификации по умолчанию для токенов и их переопределения в DI. Можно также использовать некоторое настраиваемое промежуточное ПО для проверки ответов на токены, что, вероятно, было бы менее навязчивым методом. Но, судя по вашим исследованиям, безопасность такой регистрации явно беспокоит некоторых, поэтому вам необходимо оценить, не в вашем случае.   -  person Vidmantas Blazevicius    schedule 20.02.2019


Ответы (1)


Мы сделали это, используя существующие события, предоставляемые IDS4, в сочетании с нашими собственными и отправляя их через Mediatr обработчикам, которые затем могут регистрировать или предпринимать другие действия (например, оповещения по электронной почте для конечных пользователей или вызов внешних интеграций). Мы также добавили в микс Hangfire для обработки определенных вещей в фоновом режиме.

IDS4 --event--> IEventSink --publish--> Mediatr --dipatch--> IAsyncNotificationHandler(s) ---> action

Our custom events --publish--> Mediatr --dispatch--> IAsyncNotificationHandler(s) --> action

action может планировать команду зависания или запись в БД и т. Д.

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

Мы не регистрируем ничего важного, например пароли или сами токены, но регистрация утверждений, вероятно, прекрасна, поскольку сами по себе они не должны быть особенно чувствительными.

Если вам нужно больше, чем дает вам IDS4, вам может потребоваться переопределить их код и ввести свою собственную логику создания событий. Например. вы можете расширить DefaultClaimsService и переопределить GetIdentityTokenClaimsAsync, чтобы вставить свою собственную логику.

person mackie    schedule 21.02.2019