如何从特定会话 Identity Server 4、.Net Core 注销用户?

Rav*_*avi 7 .net c# asp.net-identity asp.net-core identityserver4

Identity Serve 4.Net Core 3.1 一起使用,剃刀页面。也使用 Cookie 身份验证

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
Run Code Online (Sandbox Code Playgroud)

问题 -

在 Web 应用程序中,John 登录了 2 次

  • 第一次登录 Chrome
  • 边缘的第二次登录

因此,如果 John 在没有从以前的浏览器注销的情况下再次尝试在 Firefox 上第三次登录,那么我想强行从 Chrome 上的第一次登录中注销 John。

我可以跟踪会话表中的登录信息,包括会话 ID、用户 ID 等。但我不知道如何使用会话 ID 从特定会话中注销用户。

请帮忙。

谢谢

Noa*_*ahl 4

ASP.NET Core 提供了ITicketStore接口,允许您控制存储用户会话。一旦您提供了一个实现此接口的类并注册了它,它就会在创建或验证会话时调用您的类,然后您可以将其存储在数据库中,无论您喜欢什么,包括附加任意元数据,如浏览器 ID 等。

现在您的数据库中已经有了用户会话,您可以单独查询它们并根据其他逻辑(包括登录期间)的需要撤销它们。由于您现在提供了会话数据,因此只需删除记录即可有效地将用户从该会话中注销。请注意,如果您使用任何缓存层来减少存储请求,则还需要删除所有缓存的副本。

请注意,这与 IdentityServer 是分开的,并且发生在 ASP.NET Core 本身上。

这是一个很好的教程,帮助我在我的应用程序中实现这一点。

在启动中注册的示例,PersistentTicketStore我的实现在哪里:

// Persistent ticket/cookie store to provide durable user sessions
services.AddSingleton<IUserSessionRepository, UserSessionRepository>();
services.AddSingleton<ITicketStore, PersistentTicketStore>();
services.AddOptions<CookieAuthenticationOptions>(CookieAuthenticationDefaults.AuthenticationScheme)
    .Configure<ITicketStore>((options, store) => options.SessionStore = store);
Run Code Online (Sandbox Code Playgroud)