阻止用户并手动使访问令牌过期后结束会话

时间:2018-10-02 08:40:44

标签: c# asp.net asp.net-web-api asp.net-identity

我正在使用ASP web API前端应用程序运行Angular 5应用程序,我正在使用ASP Identity进行身份验证。

现在我的应用具有 阻止用户 的功能,但是由于我使用的是访问令牌,因此无法找到一种方法来尽快注销用户除非我使用不良做法(在问题的最后几行中提到),否则它们将被阻止。

后端API应用程序中有一个 Verify 方法,它会检查访问令牌在Angular应用程序的每个服务调用中是否有效,当然这是当用户被阻止时,访问令牌不会更改,因此用户会继续访问,直到其访问令牌到期为止。

克服此问题的最佳实践是什么?

我使用的错误做法:

  Verify() {
     var db = new ApplicationDbContext();
     var user = db.users.Where(a => a.UserName == User.Identity.Name).FirstOrDefault();

     if(!user.isActive) { return Ok("Blocked")}
     else {
        if (User.Identity.IsAuthenticated) { return Ok("Authorized"); }
        else return Ok("Not Authorized");
        }
  }

但是验证函数多次调用,因此每次搜索数据库都不是一个好的解决方案。

->为了澄清Angular应用程序中的注销,它首先从本地存储中清除访问令牌,然后重定向到登录页面,因此与Web Api无关

->请告诉我我的问题是否需要澄清

1 个答案:

答案 0 :(得分:0)

如果绝对有必要避免数据库调用,那么我将把引导用户从应用程序引导到Angular的责任。请在下面查看我使用网络套接字的建议流程。

  1. 管理员阻止了该用户,该api被阻止了该用户的指令。的 api将用户标记为在数据库中被阻止,并通过websockets将消息向下推送到angular应用程序(我会使用 包含用户ID的设置的信号R)。
  2. Angular应用程序检查从api发送的userId是否属于 到当前用户会话(可能是会话存储)。如果是这种情况,请启动 清除hes令牌并注销,退出用户。
  3. 如果用户尝试再次登录,只需移动检查以查看该用户是否被阻止使用您的登录方法,并且他/她将不再能够再次登录。

这通过依赖套接字连接来引导用户,将所有精力都放在一个篮子里,但是它取消了api负责检查每个呼叫的责任,这将减少数据库的震颤。