什么是Identity Server 4引发事件?

3
我已经下载了IdentityServer4快速入门示例,并正在学习理解其中的所有内容。到目前为止,我已经成功用Identity Core + Dapper替换了TestUsers,但仍有一些代码部分对我来说不太清晰,我无法弄清它们的作用。完整的代码示例可以在此处找到:https://github.com/IdentityServer/IdentityServer4.Quickstart.UI/tree/release/Quickstart 在这些控制器的许多部分中,我发现以下代码行:
await _events.RaiseAsync(new UserLoginSuccessEvent(provider, providerUserId, user.Id.ToString(), user.Email));

现在,UserLoginSuccessEvent已成为IdentityServer4.Events库的一部分,而_events实际上是IEventService。还有其他调用,例如UserLogoutSuccessEventConsentDeniedEvent等等。

我的问题是,上述内容实际上是做什么的?它是否应该触发某种日志记录,如果是,那么在哪里?我是否应该实现一些东西来注入这里并触发自己的操作或完全不同的操作。


正如您所描述的那样:记录日志。IDS中的大多数事件都很重要,因此当需要时,您需要有一个事件系统尽快采取行动。不过,也有默认实现。我只用过EF Core的IDS,并将其记录到数据库中。 - Camilo Terevinto
@CamiloTerevinto 既然这是日志记录,那么我该如何控制它,以及在哪里设置它,使其去到我想要的地方。例如,发送到我的数据库。 - Bagzli
与ASP.NET Core中的大多数服务一样。创建自己的类来实现IEventService并在容器中注册它。 - Camilo Terevinto
1个回答

4

DefaultEventService类是IdentityServer4提供的实现IEventService接口的默认实现。DefaultEventService使用一个IEventSink对象来接收所触发的事件 (请参阅其RaiseAsync实现)。IdentityServer4中的DefaultEventSink也注册为IEventSink。DefaultEventSink用于持久化和记录事件。

因此,调用方代码调用DefaultEventService.RaiseAsync(..)方法,该方法又调用DefaultEventSink.PersistAsync方法来记录事件。

您可以提供自己的IEventService或IEventSink接口实现,或两者兼备。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接