[使用Identity Server 4,我试图通过服务器端客户端(例如MVC)的前通道规范通知客户端用户已注销。 this documentation说;
IdentityServer跟踪用户已登录的客户端,并在IIdentityServerInteractionService上提供一个名为GetLogoutContextAsync的API。
我想知道IdentityServer如何跟踪用户登录的客户端?它存储在内存中吗?如果是,那么在多服务器+负载均衡器环境中如何工作?
默认情况下,它将该信息作为属性存储在身份验证Cookie中。您可以通过实现IdentityServer4.Services.IUserSession
提供自己的机制。您可以在此处找到默认的实现:
在我们的实现中,我们将用户会话数据存储在DB中,因此会话客户端列表也存储在其中。这样具有很好的副作用,即不易受可能影响cookie方法的竞争条件的影响。对不同客户端的并发登录请求(在我们的解决方案中可能发生)可能导致一个被另一个覆盖。