Identityserver4 成功授权后如何执行自定义代码?

Identityserver4 成功授权后如何执行自定义代码?,identityserver4,Identityserver4,客户端应用程序正在重定向到IdentityServer4实例-“/connect/authorize/callback”?客户端id=…”。 如果用户未登录(没有cookie),他将被重定向到登录页面,在回发时,我可以执行随机逻辑(将用户订阅到此客户端-使用客户端id将索赔添加到用户的索赔集合) 如果用户拥有有效的cookie,则没有登录屏幕,IdentityServer4将用户重定向回客户端应用程序,并在查询字符串中包含请求的令牌(同意被关闭) 发生此事件时,如何执行自定义代码?A“登录成功”

客户端应用程序正在重定向到IdentityServer4实例-“/connect/authorize/callback”?客户端id=…”。 如果用户未登录(没有cookie),他将被重定向到登录页面,在回发时,我可以执行随机逻辑(将用户订阅到此客户端-使用客户端id将索赔添加到用户的索赔集合)

如果用户拥有有效的cookie,则没有登录屏幕,IdentityServer4将用户重定向回客户端应用程序,并在查询字符串中包含请求的令牌(同意被关闭)

发生此事件时,如何执行自定义代码?

A“登录成功”“活动可从以下网址获得:。不幸的是,Identity Server事件是面向日志的,因此您必须实现以捕获事件,并且您可能无法在不中断其余OIDC流的情况下执行诸如显示UI之类的操作。这也意味着您不能记录事件,除非您在
IEventSink
实现中手动处理它(请参阅,它只是将事件序列化到注册为注入的任何记录器)。这一事件是由政府提出的

首先,在配置中启用“成功”事件

services.AddIdentityServer(选项=>
{
options.Events.RaiseSuccessEvents=true;
});
…然后查找
用户登录访问事件

公共类LoginEventSink:IEventSink
{
公共任务PersistAsync(事件evt)
{
if(evt.Id.Equals(EventIds.userloginsucess))
{
//做事
}
}
}
其中一个通过将
Event.Endpoint
设置为
UI
来告诉您登录是否是交互式的,但我看不到从
IEventSink
获得该信息的方法,我不太确定它是如何使用的。如果需要,您可以在OIDC“提示”模式下检查
None


根据您的设置和要求,您还可以在质询返回时在客户端捕获事件,但听起来您希望将其保留在Identity Server中。

因为它是一项任务,所以您应该返回(在方法的最后一行添加):return Task.CompletedTask;