【问题标题】:How to add audit logging with IdentityServer如何使用 IdentityServer 添加审计日志
【发布时间】:2019-07-14 15:08:29
【问题描述】:

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

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

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

所以问题是:如果可能的话,在哪里连接到 IdentityServer 以实现对已发行令牌的审计日志记录的正确/最佳位置?

【问题讨论】:

  • 这应该很容易通过扩展令牌的默认身份服务器服务并在 DI 中覆盖它们来完成。还可以使用一些自定义中间件来检查令牌的响应,这可能是一种侵入性较小的方法。但显然,根据您的研究,此类日志记录的安全性是一些人关心的问题,因此您需要评估它是否不适合您。

标签: identityserver4 audit-logging


【解决方案1】:

我们通过使用 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 以插入您自己的逻辑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-10
    • 2018-04-26
    • 2018-01-25
    • 1970-01-01
    • 2022-11-24
    • 2012-09-16
    • 1970-01-01
    • 2012-08-31
    相关资源
    最近更新 更多