IdentityServer3中的回调,当前ASP.NET标识会话ID可供访问



我正在使用IdentityServer3实现单一登录(SSO)解决方案。我有一个承载IdenitityServer的ASP.NET 4.5.2(MVC)应用程序。我需要跟踪所有登录用户,并将他们的活动存储在数据库中。这是在我的自定义Identity Server中登录时,我需要记录已颁发的ASP.NET Identity会话ID以及用户的ID。然后,当使用其中一个客户端应用程序时,它会向我的自定义Identity Server发送信号。信号包含该ASP.NET标识会话。这个信号用于检测所有客户端的活动,因此我的自定义身份服务器可以扩展用户会话的有效性。请注意,如果用户决定登录到另一个客户端,则需要此逻辑。

我现在面临的技术挑战是在Identity Server中找到一个位置,该位置发生在本地登录之后,并且包含当前的ASP.NET Identity会话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的文档,找不到一个可以在管道中插入自定义代码的地方,该代码在完全登录后执行。我需要这样的位置,这样我就可以在数据库中写入一个新用户当前登录的信息,以及哪个ASP.NET身份会话id属于他。

查看IEventService——它为您提供了IdentityServer中与活动相关的强类型通知。https://identityserver.github.io/Documentation/docsv2/configuration/events.html

最新更新