如何注销 ASP.NET Core Identity 中的其他用户

How to sign out other user in ASP.NET Core Identity

如何在 ASP.NET Core Identity 中注销另一个用户(不是当前登录的用户)。

我知道 SignInManager 中有一个 SignOutAsync() 方法,但似乎没有覆盖接受用户作为参数。我正在寻找类似的东西:

signInManager.SignOutAsync(user);

我认为您可能会发现一些 撤销 功能,可以强制注销用户。由于无状态连接和token-based(或者我们可以说claim-based)身份验证的性质,目前不容易实现。

被吊销的用户应该访问令牌验证端点以检查令牌是否有效。在那之前,(1) 用户可以显示为 signed-in,或者 (2) 我们需要实现客户端(应用程序或网络)来访问令牌端点 very经常直到令牌过期或撤销。

SignIn/Out 被限制在 token-authorized 用户身份范围内,因此可行的解决方案是使令牌无效。

首先更新该用户的安全标记:

await userManager.UpdateSecurityStampAsync(user)

然后在 SecurityStampValidationInterval 到来之前,该用户不会注意到更改。所以将它设置为 Zero 以立即注销:

services.AddIdentity<User, Role>(identityOptions =>
{
   // enables immediate logout, after updating the user's stat.
   identityOptions.SecurityStampValidationInterval = TimeSpan.Zero;
}

更新:针对 ASP.NET 核心身份 2.x、3.x、5.x

services.Configure<SecurityStampValidatorOptions>(options =>
{
    // enables immediate logout, after updating the user's stat.
    options.ValidationInterval = TimeSpan.Zero;   
});