首页 > 解决方案 > IdentityServer 如何跟踪用户登录的客户端?

问题描述

使用 Identity Server 4,我试图通过服务器端客户端(例如 MVC)的前端通道规范通知客户端用户已注销。该文件说;

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

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

标签: identityserver4openid-connect

解决方案


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

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

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


推荐阅读