我正在使用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无关
->请告诉我我的问题是否需要澄清
答案 0 :(得分:0)
如果绝对有必要避免数据库调用,那么我将把引导用户从应用程序引导到Angular的责任。请在下面查看我使用网络套接字的建议流程。
这通过依赖套接字连接来引导用户,将所有精力都放在一个篮子里,但是它取消了api负责检查每个呼叫的责任,这将减少数据库的震颤。