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

时间:2017-01-13 07:47:31

标签: c# asp.net-core asp.net-core-mvc asp.net-core-identity

如何在ASP.NET核心标识中注销另一个用户(而不是当前登录的用户)。

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

signInManager.SignOutAsync(user);

2 个答案:

答案 0 :(得分:14)

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

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 Core Identity 2.x

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

答案 1 :(得分:0)

我认为您可能会找到一些撤销功能,这会强制用户注销。它目前不容易实现,因为无状态连接和基于令牌的(或者我们可以说基于声明的)身份验证的性质。

应该将已撤销的用户访问到令牌验证端点,以便检查令牌是否有效。在此之前,(1)用户可以显示为已登录,或者(2)我们需要实施客户端(应用程序或Web)以频繁访问令牌端点非常,直到令牌过期或revokation。

SignIn / Out被授予令牌授权的用户身份范围,因此可行的解决方案是使令牌无效。