c# - 什么是 Identity Server 4 引发事件
问题描述
我已经下载了 IdentityServer4 快速入门示例,我正在通过它来尝试了解这里发生的一切。到目前为止,我所做的是将 TestUsers 替换为我自己的使用 Identity Core + Dapper 的自定义身份实现。但是,代码的某些部分对我来说仍然没有意义,我无法弄清楚它们的作用。完整的代码示例可以在这里找到: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
。还有其他调用,例如UserLogoutSuccessEvent
,ConsentDeniedEvent
等等。
我的问题是上面实际上做了什么?它是否应该触发某种日志记录,如果是这样的话?我想可能会实现一些会在这里注入并触发我自己的东西或完全不同的东西。
解决方案
IdentityServer4 提供的 DefaultEventService 类是 IEventService 的默认实现。DefaultEventService 使用 IEventSink 对象接收引发的事件。(参见它的 RaiseAsync 实现)。DefaultEventSink 也是 IdentityServer4 的一部分,注册为 IEventSink。DefaultEventSink 持久化\记录事件。
因此,调用者代码调用 DefaultEventService.RaiseAsync(..) 方法,该方法又调用 DefaultEventSink.PersistAsync 方法来记录事件。
您可以提供自己的 IEventService 或 IEventSink 接口或两者的实现。
推荐阅读
- javascript - couchDB 无法使用 node.js 创建数据库
- c++ - 使用 STL 向量时构造函数的未解析外部符号
- pygame - 在pygame中按下鼠标时制作精灵更改图像
- r - 如何在这个简单的数据中进行方差分析?
- reactjs - 使用两个端口在 Heroku 上部署 React APP
- javascript - Gravity Forms 带有美国国家代码的电话面罩
- vim - vim x/y 滚动条隐藏我的命令,真的很讨厌
- r - Prestige$type 中的错误:“闭包”类型的对象不是子集
- npm - 节点应用程序 - 有大量的哈希查找文件
- python - 将不同类型的缺失值转换为 pandas 可识别的 NA