Записать логин пользователя для аудита на IdentityServer4 - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть сервер, работающий для идентификации только для аутентификации, и я хочу регистрировать каждый логин пользователя.Я прочитал документ Identity и попытался использовать IEventSink.Это должно быть легко, но Логин продолжает работать без вызова EventSink.Должен ли я где-нибудь зарегистрировать свой класс?Чего мне не хватает?

var builder = services
.AddIdentityServer(options =>
{
    options.Events.RaiseSuccessEvents = true;
}
)
.AddInMemoryIdentityResources(Config.GetIdentityResources())
.AddInMemoryApiResources(Config.GetApis())
.AddInMemoryClients(Config.GetClients())
.AddAspNetIdentity<ApplicationUser>()
.AddOperationalStore(options =>
{
    options.ConfigureDbContext = b =>
        b.UseMySql(Configuration.GetConnectionString("DefaultConnection")
    );
    options.EnableTokenCleanup = true;
});

Это EventSink, который я создал:

public class MyEventSink : IEventSink
{
    public Task PersistAsync(Event evt)
    {
        if (evt.Id.Equals(EventIds.TokenIssuedSuccess))
        {
            var _test = evt as TokenIssuedSuccessEvent;
        }
        throw new System.NotImplementedException(); // shouldn't even login
        return Task.CompletedTask;
    }
}

1 Ответ

0 голосов
/ 25 февраля 2019

Как указал мне @ camilo-terevinto, я просто не регистрировал свой MyEventSink в качестве службы.
Мне потребовалась следующая строка в моем запуске, поэтому, когда я установил Events.RaiseSuccessEvents = true, IdentityServer это знаетмой сервис должен звонить:

services.AddScoped<IEventSink , MyEventSink>();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...