我正在使用IdentityServer3实现单点登录(SSO)解决方案。我有承载IdenitityServer的ASP.NET 4.5.2(MVC)应用程序。我要求跟踪所有已登录的用户并将其活动存储在数据库中。那是在我的自定义Identity Server中的签到时,我需要记录已发布的ASP.NET Identitiy会话ID以及用户的ID。然后,当使用其中一个客户端应用程序时,它会向我的自定义Identitiy Server发送一个信号。该信号包含ASP.NET身份会话。此信号用于检测所有客户端的活动,因此我的自定义Identitiy Server可以扩展用户会话的有效性。请注意,如果用户决定登录其他客户端,则需要此逻辑。
我现在面临的技术挑战是在Identity Server中找到一个位置,该位置在本地登录后发生,并包含当前的ASP.NET Identitiy会话ID。
到目前为止,我在自定义 IUserService 中找到了以下功能:
// Summary:
// This method is called prior to the user
// being issued a login cookie for IdentityServer.
//
// Parameters:
// context:
// The context.
public virtual Task PostAuthenticateAsync(PostAuthenticationContext context);
在我的自定义IUserService中,我已经注入了IOwinContext,但是正如注释所述,在用户获得IdentityServer cookie之前,会调用此函数。
我浏览过IdentityServer3的documentation,找不到一个地方,其中可以在管道中插入自定义代码,该代码在完全登录后执行。我需要这样的地方,以便我可以写入我的数据库,当前新用户已登录,以及哪个ASP.NET身份会话ID属于他。
答案 0 :(得分:2)
查看IEventService - 它为您提供IdentityServer中与活动相关的强类型活动通知。 https://identityserver.github.io/Documentation/docsv2/configuration/events.html