【问题标题】:What is Identity Server 4 Raise Event什么是 Identity Server 4 引发事件
【发布时间】:2019-10-10 13:45:29
【问题描述】:

我已经下载了 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));

现在UserLoginSuccessEventIdentityServer4.Events 库的一部分,_events 实际上是IEventService。还有其他调用,例如UserLogoutSuccessEventConsentDeniedEvent 等等。

我的问题是上面的实际作用是什么?它是否应该触发某种日志记录,如果是这样的话?我想也许可以实现一些会在这里注入并触发我自己的东西或完全其他东西的东西。

【问题讨论】:

  • 正如您所描述的:日志记录。 IDS 中的大多数事件都很重要,因此您有一个事件系统可以在需要时尽快采取行动。不过,有一个默认实现。我只将 IDS 与 EF Core 一起使用,它会记录到数据库中
  • @CamiloTerevinto 因为这是记录,那么我该如何控制它以及我在哪里进行设置,以便它去我想要去的地方。例如到我的数据库。
  • 与 ASP.NET Core 中的大多数服务相同。创建自己的实现IEventService的类并在容器中注册

标签: c# asp.net-core-mvc identityserver4


【解决方案1】:

IdentityServer4 提供的DefaultEventService 类是IEventService 的默认实现。 DefaultEventService 使用 IEventSink 对象接收引发的事件。 (参见它的 RaiseAsync 实现)。 DefaultEventSink 也是 IdentityServer4 的一部分,注册为 IEventSink。 DefaultEventSink 持久化\记录事件。

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

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

【讨论】:

    猜你喜欢
    • 2018-08-01
    • 2018-06-27
    • 2018-07-23
    • 2013-11-25
    • 2021-11-11
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    • 2013-03-24
    相关资源
    最近更新 更多