我有一台仅为身份验证运行的服务器,我想记录每个用户的登录信息。
我已经阅读了身份文档,并尝试使用IEventSink
。它应该很简单,但是Login可以继续工作而无需调用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;
}
}
答案 0 :(得分:0)
正如@ camilo-terevinto向我指出的那样,我只是没有将我的MyEventSink
注册为服务。
我在启动时需要以下行,因此当我设置Events.RaiseSuccessEvents = true
时,IdentityServer知道它应该是我的服务,
services.AddScoped<IEventSink , MyEventSink>();