【问题标题】:How to sign out other user in ASP.NET Core Identity如何在 ASP.NET Core Identity 中注销其他用户
【发布时间】:2017-01-13 07:47:30
【问题描述】:

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

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

signInManager.SignOutAsync(user);

【问题讨论】:

  • 您是否尝试过使目标用户的安全标记无效。这应该使他/她在下一个 http 请求上的会话无效。
  • 安全印章的价值重要吗?或者只是它应该与以前的安全印章不同?

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


【解决方案1】:

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

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、3.x、5.x

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

【讨论】:

  • 此方案是否适用于asp.net identity 2.0及以上版本?
  • 更新了 ASP.NET Core Identity 2.x 的答案。
  • 这个severely impact 只是one 对数据库的查询。如果该数据库无法处理它,请更改它!
  • 这里是正确的 - 它不仅仅是 one 查询 - 计算 ASP.NET Core 2.X 上的 5 个额外查询(AspNetUser、AspNetUserClaims、AspNetUserRoles、AspNetRoles、AspNetRoleClaims)
  • AFAIK 这将导致对每个用户的每个请求的用户“更改”的数据库查询,这将影响对您的 web 应用程序的所有请求。
【解决方案2】:

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

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-01-10
  • 1970-01-01
  • 2015-02-05
  • 2023-03-13
  • 2019-10-03
  • 2015-12-28
  • 1970-01-01
相关资源
最近更新 更多