IdentityServer如何跟踪用户已登录的客户端?

时间:2020-05-13 21:08:25

标签: identityserver4 openid-connect

对于Identity Server 4,我尝试通过服务器端客户端(例如MVC)的前通道规范通知客户端用户已注销。 this documentation说;

IdentityServer跟踪用户已登录的客户端,并在IIdentityServerInteractionService上提供一个名为GetLogoutContextAsync的API。

我想知道IdentityServer如何跟踪用户登录的客户端? 它存储在内存中吗?如果是,那么在多服务器+负载均衡器环境中如何工作?

1 个答案:

答案 0 :(得分:2)

默认情况下,它将该信息作为属性存储在身份验证Cookie中。您可以通过实现IdentityServer4.Services.IUserSession提供自己的机制。您可以在此处找到默认的实现:

https://github.com/IdentityServer/IdentityServer4/blob/3.1.3/src/IdentityServer4/src/Services/Default/DefaultUserSession.cs

在我们的实现中,我们将用户会话数据存储在DB中,因此会话客户端列表也存储在其中。这样具有很好的副作用,即不易受到可能影响cookie方法的竞争条件的影响。对不同客户端的并发登录请求(可能在我们的解决方案中发生)可能导致一个被另一个覆盖。