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 次
因此,如果 John 在没有从以前的浏览器注销的情况下再次尝试在 Firefox 上第三次登录,那么我想强行从 Chrome 上的第一次登录中注销 John。
我可以跟踪会话表中的登录信息,包括会话 ID、用户 ID 等。但我不知道如何使用会话 ID 从特定会话中注销用户。
请帮忙。
谢谢
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)
| 归档时间: |
|
| 查看次数: |
2039 次 |
| 最近记录: |