如何处理/拦截由Identity Server 4 .NET Core引发的事件

5

我在Identity Server 4文档中看到,可以通过以下方式打开事件:

services.AddIdentityServer(options =>
{
    options.Events.RaiseSuccessEvents = true;
    options.Events.RaiseFailureEvents = true;
    options.Events.RaiseErrorEvents = true;
});

这一切都很好,但我想知道如何监听事件的触发,例如“ApiAuthenticationSuccessEvent”。在.NET Core Web应用程序中,如何监听此事件的触发?我不会将事件持久化到某个事件存储中,我只需要知道何时会触发这样的事件,以便我可以检查该事件并使用信息执行某些操作。
也许我做错了什么,或者我错过了一些明显的东西!
2个回答

8

尽管这个问题有点老,但我遇到了同样的问题,并通过以下方式解决。 您只需要注册自己的IEventSink实现,并实现方法PersistAsync

public class CustomEventSink : IEventSink
{
    public CustomEventSink()
    {
    }

    public Task PersistAsync(Event evt)
    {
       // Log in the way you want the event
       return Task.CompletedTask;
    }
}

然后在你的 Startup.cs 中进行如下操作:

 // Do this AFTER having added IndentityServer with services.AddIdentityServer
 services.AddTransient<IEventSink, CustomEventSink>();

如果您查看Github上的IdentityServer4 DefaultEventSink类,那么就可以在那里将触发的事件记录到已注册的记录器中。

似乎这也是文档中推荐的做法:http://docs.identityserver.io/en/latest/topics/events.html - Issung

2
很遗憾,这些事件仅用于记录目的(仅在使用TokenRequestValidator时,在IS4内部方面)。
我最近提出了一个“真实”事件的功能请求,但他们并不热情。基本上,他们认为这些活动应该属于客户端(任何OIDC流程开始或返回的地方)。
我有点理解他们的观点,但我真的更喜欢将IS4日志隔离到IS4中...

我有点卡在这里了!我需要找到一种方法来知道何时使用令牌进行js客户端身份验证(在用户具有持久化身份验证会话的情况下)。我已经在您的功能请求中添加了评论,以查看是否有任何有用的响应。 - Dan

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