Как добавить журнал аудита с IdentityServer - PullRequest
0 голосов
/ 20 февраля 2019

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

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

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

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

1 Ответ

0 голосов
/ 21 февраля 2019

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

...