我已经在Identity Server 4文档中读到可以像这样打开事件:
services.AddIdentityServer(options =>
{
options.Events.RaiseSuccessEvents = true;
options.Events.RaiseFailureEvents = true;
options.Events.RaiseErrorEvents = true;
});
这一切都很好,但我想知道如何在引发事件时监听,例如“ApiAuthenticationSuccessEvent'”。如何在.NET Core Web应用程序中监听此事件?我不会在某个地方将事件持续到某个事件存储区,我只需要知道何时引发这样的事件,以便我可以检查事件并对信息做些什么。
也许我以错误的方式解决这个问题,或者我错过了一些明显的东西!
答案 0 :(得分:0)
不幸的是,这些事件严格用于记录目的(并且仅在使用TokenRequestValidator
时,就IS4内部而言)。
我最近开了一个feature request询问“真实”事件,但他们并不热情。基本上他们认为这些活动属于客户端(OIDC流程发起或返回的任何地方)。
我可以看到他们的观点,但我真的更愿意将IS4记录保持隔离到IS4 ......
答案 1 :(得分:0)
即使这是一个有点老的问题,我也遇到了相同的问题,并通过以下方式解决了。 您只需要注册自己的 IEventSkin 实现并实现方法 PersistAsync
public class CustomEventSink : IEventSink
{
public CustomEventSink()
{
}
public Task PersistAsync(Event evt)
{
// log in the way you want the evt
return Task.CompletedTask;
}
}
然后在您的 Startup.cs
中 // do this AFTER having added IndentityServer with services.AddIdentityServer
services.AddTransient<IEventSink, CustomEventSink>();
如果您查看IdentityServer4 Github项目,那么它们会将引发的事件记录到已注册的记录器中:https://github.com/IdentityServer/IdentityServer4/blob/master/src/IdentityServer4/src/Services/Default/DefaultEventSink.cs