为了安全起见,我使用OWIN Cookie身份验证(ASP.NET Identity 2.2)构建了一个新的Web API应用程序。
我对整个Cookie事情都很陌生,但我遇到了一个令人头疼的问题:如果他们的帐户已停用(已删除),登录用户如何立即停止使用该API或者被锁定)?
这是在一个惊人的发现之后出现的,如果我有一个用户登录客户端应用程序,并且我通过其他应用程序删除了他们的用户帐户,他们仍然可以访问API(即[Authorize]
过滤器仍然成功,因为他们的cookie仍然有效。)
如果我错了,请有人纠正我,但是AFAIK,cookie没有存储在服务器上,所以没有办法让#34;无效"饼干。
是的,如果用户退出,他们将无法再次重新登录。另外,我了解在成功登录后设置每个cookie的到期时间可以缓解这个问题。
但是下面的情况呢:系统管理员(让他们称他为JoeAdmin)被解雇或以其他方式变得不可信,而其他一些管理员则锁定了他的帐户。如果JoeAdmin在他被解雇并且心怀不满时碰巧登录,他仍然可以访问系统并且可以做一些真正的伤害。
在这种情况下,JoeAdmin如何立即被阻止?
答案 0 :(得分:1)
JoeAdmin碰巧在他被解雇并成为心怀不满时登录
JoeAdmin也可以离线保存cookie值,等待他的帐户被撤销,然后将cookie值恢复到他的浏览器。
如果您需要立即使登录失效,则OWIN cookie身份验证并不理想。
这是因为有关用户的所有状态信息都存储在客户端,仅在服务器端使用机密进行身份验证。
那就是说,你可以用Oauth2刷新令牌like here做些什么。例如有一个访问令牌,在一分钟后过期,当过期时,应用程序必须使用刷新令牌才能获得另一分钟的访问令牌。
这样,任何被撤销的帐户只会在短时间内曝光。但是,您可能需要处理客户端和服务器上不同步时钟的复杂性。
简而言之,如果您需要以这种方式保护您的系统,传统的服务器端令牌将是您的选择。在这方面他们更安全。
使用OWIN cookie的风险与使用JWT进行身份验证的风险非常相似。请参阅this comment以及相关的问题和答案。