如何在ASP.NET核心标识中注销另一个用户(而不是当前登录的用户)。
我知道SignInManager
中有一个SignOutAsync()
方法,但似乎没有覆盖接受用户作为参数。我正在寻找类似的东西:
signInManager.SignOutAsync(user);
答案 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被授予令牌授权的用户身份范围,因此可行的解决方案是使令牌无效。