如何使用IdentityServer添加审核日志记录

时间:2019-02-20 20:18:39

标签: identityserver4 audit-logging

我们正在使用IdentityServer4创建安全令牌服务。由于审核要求,我们希望记录每次成功(和失败)的登录尝试以及有关已发行令牌的信息,尤其是:声称令牌包括在内的信息。

最明显的部分似乎打开了IdentityServer中提供的the event types(其中的一部分),并创建了一个custom event sink,可以在其中处理登录成功和失败(例如,登录到数据库)。

我们已经创建了这样的接收器,但是传递到PersistAsync方法中的事件仅包含有关尝试登录的用户的信息,而不包含有关已发行令牌的信息。我还发现各种已发布的(hereherehere)都提到了有关支持令牌记录,令牌记录定制的安全问题,所有这些使我相信这可能不是就像我们希望的那样直接。

所以问题是:如果可能的话,将挂在IdentityServer i上的正确/最佳位置,以实现对已发行令牌的审核日志记录吗?

1 个答案:

答案 0 :(得分:0)

为此,我们将IDS4公开的现有事件与我们自己的事件结合起来,并通过Mediatr将其分发给处理程序,然后这些处理程序可以记录或采取其他操作(例如,向最终用户发送电子邮件警报或调用外部集成)。我们还添加了Hangfire,以处理某些事物的后台处理。

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

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

action可能正在执行hangfire命令或写入数据库等。

关于当前请求的上下文-由于这些事件是在请求的上下文中调用的,因此您有很多可用的环境信息-主要是有关用户的声明。

我们不会记录任何敏感的信息,例如密码或令牌本身,但是记录声明可能很好,因为声明本身并不特别敏感。

如果您需要的不仅仅是IDS4提供的功能,那么您可能需要覆盖他们的代码并注入自己的事件引发逻辑。例如。您可以扩展DefaultClaimsService并覆盖GetIdentityTokenClaimsAsync来插入自己的逻辑。