如何获得使用IdenityServer4登录的用户的列表?

时间:2019-09-11 13:04:41

标签: c# asp.net-web-api2 asp.net-core-webapi identityserver4

我有一个AspnetCore + Angular设置,其中身份验证部分由IdentityServer4处理。现在的要求之一是获取当前已登录的所有用户的列表。有关如何进行此操作的任何想法/建议?

  

PS:以防万一,我使用的是隐式流。

3 个答案:

答案 0 :(得分:0)

Auth通过cookie持久化,该cookie位于客户端。服务器不知道谁全部登录。它仅在特定请求的上下文中(客户端向其发送auth cookie)知道该特定客户端是否已通过身份验证。

如果您真的需要这样做,则需要自己手动进行跟踪,例如为每次登录将记录添加到表中。但是,这会很快变坏。您还需要管理登出和有效期,以使自定义数据保持最新状态。

答案 1 :(得分:0)

一个通用的答案可能是: ASP.NET CORE将每个用户会话保存在一个cookie中,该cookie分别位于每个设备上每个用户的浏览器上。一旦需要,您就必须自己集中该系统。但是,由于问题涉及Identityserver,因此我们可以研究IdentityServer作者在该领域已经完成的工作。而且他们至少提供了两个扩展点。

第一个方法是使用Reference Token(默认情况下使用jwt),然后浏览持久授权数据库,获取所有由userId分组的会话。不是OpenIdConnect的标准方法,但它存在。

另一种方法是基于数据库(而不是默认情况下基于cookie)实现您的自定义会话存储。这样您就可以访问使用给定用户ID登录的所有客户端。 HereIDistributedCache的混合扩展(Cookie + DefaultUserSession,例如REDIS)的旧示例(但仍然有效)。通常,在要求列出所有用户会话之后,会出现另一个:在每一行旁边创建一个 kill the session 按钮。在这里,您必须注意访问令牌的生存期(将其合理地缩短),因为一旦发出的jwt不能在其正常到期之前失效。

答案 2 :(得分:0)

ASP.Net Core中的默认cookie提供程序中提供了使用数据库或分布式缓存来存储cookie有效负载的规定。检出Microsoft.AspNetCore.Authentication.Cookies.ITicketStore界面和CookieAuthenticationOptions.SessionStore属性。

我们创建了自己的实现,该实现将auth cookie和IDS4内容存储在PersistedGrants表中。它运作良好,使cookie保持较小,并且还便于“在所有设备上注销”选项。如果您将条目的到期时间与Cookie身份验证属性对齐,那么整理工作将为您完成。