我们正在使用IdentityServer4创建一个安全令牌服务。由于审计要求,我们希望记录每一次成功(和失败)的登录尝试,以及有关颁发的令牌的信息,特别是:令牌包括哪些声明。
最明显的部分似乎是打开(一些) IdentityServer中提供的the event types,并创建一个可以处理登录成功和失败的custom event sink (例如,记录到数据库中)。
我们已经创建了这样一个接收器,但是传递给PersistAsync方法的事件只包含有关尝试登录的用户的信息,而不包含有关颁发的令牌的信息。我还发现了各种发布的(here、here和here),它们都提到了支持令牌日志、自定义令牌日志等方面的安全问题,所有这些都让我相信,这可能并不像我们希望的那样简单。
所以问题是:在哪里,如果可能的话,是连接到IdentityServer i的正确/最佳位置,以便实现对已颁发令牌的审计日志记录?
发布于 2019-02-21 20:48:42
为此,我们将IDS4公开的现有事件与我们自己的事件结合使用,并通过Mediatr将它们分派给处理程序,然后处理程序可以记录或采取其他操作(例如,向最终用户发送电子邮件警报或调用外部集成)。我们还将Hangfire添加到混搭中,以处理某些事情的后台处理。
IDS4 --event--> IEventSink --publish--> Mediatr --dipatch--> IAsyncNotificationHandler(s) ---> action
Our custom events --publish--> Mediatr --dispatch--> IAsyncNotificationHandler(s) --> action
action可以调度hangfire命令或写入DB等。
至于当前请求的上下文-因为这些事件是在请求的上下文中调用的,所以您有相当多的环境信息可用-主要是针对有问题的用户的声明。
我们不会记录任何敏感内容,比如密码或令牌本身,但记录声明可能没问题,因为这些声明本身不应该特别敏感。
如果你需要比IDS4提供的更多的东西,那么你可能需要重写他们的代码并注入你自己的事件引发逻辑。例如,你可以扩展DefaultClaimsService并覆盖GetIdentityTokenClaimsAsync来插入你自己的逻辑。
https://stackoverflow.com/questions/54794608
复制相似问题