【发布时间】:2016-04-04 21:38:36
【问题描述】:
想象以下场景。
用户已通过身份验证并获得身份验证 cookie。这意味着不应再次输入用户名和密码。 我只在身份验证 cookie 中存储用户名。
黑客以某种方式窃取了用户的身份验证 cookie。管理员决定为用户更改密码,但黑客仍然通过身份验证并且可以访问系统!
据我所知,身份验证 cookie 无法在服务器端以外的任何地方解密,不是吗?
将密码或密码哈希作为自定义声明存储在身份验证 cookie 中是否安全,以便我稍后进行比较并从受歧视的用户中删除身份验证? 它的最佳做法是什么?还是我在做或问完全错误的事情?
【问题讨论】:
-
您可以实现刷新令牌来为令牌添加过期时间。即使黑客得到了你不知道什么时候的它,它仍然会过期。
-
是的,这是一个好主意,我错过了它,但有点复杂,因为我需要存储额外的数据,而我已经有一个可以更改的密码。如果黑客(理论上)无法解密 cookie 而我可以在那里存储密码,为什么不呢?或者他可以吗?
-
您永远不能假设黑客无法解密您的数据。
Refresh Token仅用于此目的,因此用户不能长时间滥用访问令牌。 -
怎么样,假设您实现了刷新令牌并且您的用户登录了。他现在获得了一个用于身份验证的令牌。不知何故,一个黑客抓住了那个令牌。用户快速更改密码,因此如果更改密码成功,您可以强制使之前的令牌过期并授予用户一个新令牌。黑客现在有一个过时的令牌。
-
@norekhov 自己实现安全从来都不是一个好主意。 ASP.Net 身份团队考虑了您所说的所有场景。请查看 ASP.Net Identity,以便即使您不打算使用它也能获得灵感。
标签: c# asp.net authorization