【问题标题】:ASP.Net Identity Force Logout From SQLASP.Net Identity 强制从 SQL 注销
【发布时间】:2016-04-28 07:48:56
【问题描述】:

我正在为我的 MVC 5 应用程序使用 ASPNET 标识表。每天晚上,我们都会对我们的数据库进行“维护”。如果我们在该用户下修改某些内容,我想停用他们当前的会话,以便他们在 Web 应用程序中执行的下一个操作会将他们踢回登录屏幕。身份验证/授权已经使用 AspNet.Identity 内置到我的应用程序中。我只需要一种方法来通过设置一个标志(如果存在)来唤醒它。

例如,ASPNETUsers 表有一个“非活动”列,但这太永久了。我正在寻找“ThisGuyIsLoggedIn”列。

这与相同的问题很接近,但答案是从 MVC 中管理它,这不是一个选项。

forcefully log out a specific user among all online users

【问题讨论】:

  • 一种可能的方法是让 SQL 服务器使用用户 ID 调用您的 MVC 应用程序,然后您的 MVC 应用程序缓存用户列表以刷新。这里有这种可能吗?
  • 维护是通过存储过程完成的。我不知道 SQL 存储过程可以调用 MVC 中的任何内容。但如果是这样,那么是的,这将是一种可能性。
  • 有多种方法可以从 SQL proc 发出 Web 请求,具体取决于您是否启用了 CLR 集成等。这是一种:stackoverflow.com/questions/9422914/… 这是另一种:stackoverflow.com/questions/22067593/…跨度>

标签: sql-server asp.net-mvc asp.net-identity


【解决方案1】:

我想分享这个链接,其中包含有关如何强制用户注销的完整说明。

https://tech.trailmax.info/2015/09/prevent-multiple-logins-in-asp-net-identity/

github 上的完整项目: https://github.com/shaahink/Prevent-Multiple-Login-ASPNETIdentity

如果您需要重置安全标记:

 var result = await UserManager.UpdateSecurityStampAsync(user.Id);

从管理面板重置用户标记是非常好的解决方案。

【讨论】:

    【解决方案2】:

    在使用了我意识到的一些列之后,您可以更改 SecurityStamp 列,这将使用户无效并导致任何身份验证失败。只是不要将其更改为 NULL。

     UPDATE AspNetUsers
     SET SecurityStamp = NEWID()
     WHERE Id = @USER_ID
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 2015-02-05
    • 1970-01-01
    相关资源
    最近更新 更多