gpt4 book ai didi

c# - 如何从特定 session Identity Server 4、.Net Core 中注销用户?

转载 作者:行者123 更新时间:2023-12-03 14:22:17 25 4
gpt4 key购买 nike

使用 Identity Serve 4.Net Core 3.1 , Razor 页面。还使用 Cookie 身份验证

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
问题 -
在 Web 应用程序中,John 登录了 2 次
  • 第一次登录 Chrome
  • 第二次登录边缘

  • 因此,如果约翰再次尝试在 Firefox 上第三次登录而没有从以前的浏览器中注销,那么我想强制让约翰从 Chrome 上的第一次登录中注销。
    我可以在 session 表中跟踪登录,包括 session ID、用户 ID 等。
    但我不知道如何使用 Session Id 从特定 session 中注销用户。
    请帮忙。
    谢谢

    最佳答案

    ASP.NET Core 提供了 ITicketStore允许您控制存储用户 session 的界面。一旦你提供了一个实现这个接口(interface)的类并注册了它,它就会在创建或验证 session 时调用你的类,然后你可以随意存储在数据库中,包括附加任意元数据,如浏览器 ID 等。
    现在您的数据库中有用户 session ,您可以单独查询它们并根据需要在其他逻辑中撤销,包括在登录期间。由于您现在提供 session 数据,因此只需删除记录即可有效地将用户从该 session 中注销。请注意,如果您使用任何缓存层来减少存储请求,则还需要删除所有缓存的副本。
    请注意,这与 IdentityServer 是分开的,并且发生在 ASP.NET Core 本身。
    这是 good tutorial这帮助我在我的应用程序中实现了这一点。
    在 Startup 中注册的示例,其中 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);

    关于c# - 如何从特定 session Identity Server 4、.Net Core 中注销用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63110492/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com