【问题标题】:How to handle/intercept an event raised by Identity Server 4 .NET Core如何处理/拦截 Identity Server 4 .NET Core 引发的事件
【发布时间】:2018-08-01 11:26:59
【问题描述】:

我在 Identity Server 4 文档中读到可以像这样打开事件:

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

这一切都很好,但我想知道如何在引发事件时进行监听,例如“ApiAuthenticationSuccessEvent”。如何侦听 .NET Core Web 应用程序中引发的此事件?我不会将事件持久化到某个地方的某个事件存储中,我只需要知道何时引发此类事件,以便我可以检查事件并对信息进行处理。

也许我以错误的方式处理这个问题,或者我遗漏了一些明显的东西!

【问题讨论】:

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


    【解决方案1】:

    即使这是一个有点老的问题,我也遇到了同样的问题并通过以下方式解决。 你只需要注册自己的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 Class,他们会将引发的事件记录到已注册的记录器中。

    【讨论】:

    【解决方案2】:

    不幸的是,这些事件仅用于记录目的(并且仅在使用 TokenRequestValidator 时,就 IS4 内部而言)。

    我最近打开了feature request 询问“真实”事件,但他们并不热情。基本上,他们认为这些活动属于客户端(OIDC 流起源或返回的​​任何地方)。

    我有点明白他们的意思,但我真的更希望将 IS4 日志记录与 IS4 隔离...

    【讨论】:

    • 那我有点卡在这里了!我需要找到某种方法来了解 js 客户端何时使用令牌进行身份验证(在用户具有持久身份验证会话的情况下)。我已在您的功能请求中添加了评论,看看是否有任何有用的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2021-01-17
    • 2019-04-09
    • 2023-03-31
    • 2018-04-29
    相关资源
    最近更新 更多