在 ASP.NET Core Identity 中删除登录用户的策略

Sim*_*one 3 c# asp.net-identity asp.net-core

在我的 ASP.NET Core MVC 应用程序中,管理员可能希望从他们的组织中删除一个普通用户。使用内置的 Identity 模型,使用UserManager<T>.DeleteAsync()方法,这当然是微不足道的。

但是,用户可能同时登录多个设备。我不需要实时消息传递 - 我很高兴已删除的用户在下一次请求时返回到登录页面。对于这种情况,SignalR 感觉有点矫枉过正。

Request.User.Identity.IsAuthenticated 即使他们的帐户已从后备存储中删除,在他们的会话期间仍然为真。

我的思考过程是覆盖OnActionExecutingAsync()基本控制器并在每个请求时检查后备存储中的有效记录,然后采取适当的操作(例如注销 + 重定向到登录),但这感觉像是对每个请求执行的重大开销,特别是因为后备存储是 CosmosDb,这将花费额外的请求单位。

我还需要考虑 AJAX 请求,因为 MVC 应用程序中的重要页面具有动态元素,用户可能会长时间停留在单个页面上。

在下次请求时检查他们的用户帐户是否已被删除的最有效、最轻量的方法是什么?

cit*_*nas 5

你是对的,检查每个请求是低效的。由于您提到管理员希望能够手动删除,删除和强制注销之间的几秒钟延迟不会有问题(这与几秒钟后删除相同)。

在定义您正在使用 .NET Core Identity 后,您可以简单地定义SecurityStampValidatorOptions,例如

services.Configure<SecurityStampValidatorOptions>(options =>
{
    options.ValidationInterval = TimeSpan.FromMinutes(1);
});
Run Code Online (Sandbox Code Playgroud)

这会导致每分钟验证一次用户令牌。如果您将 设置ValidationInterval.FromMinutes(0),则每次请求都会验证令牌(我认为这就像 3 个数据库调用以进行验证)。我的建议不是将其0作为值,而是您认为在用户被手动删除和他被强制退出应用程序之间的时间跨度内可接受的值。