【问题标题】:Handling password change in ASP.NET 5 MVC 6在 ASP.NET 5 MVC 6 中处理密码更改
【发布时间】:2016-04-04 21:38:36
【问题描述】:

想象以下场景。

  1. 用户已通过身份验证并获得身份验证 cookie。这意味着不应再次输入用户名和密码。 我只在身份验证 cookie 中存储用户名。

  2. 黑客以某种方式窃取了用户的身份验证 cookie。管理员决定为用户更改密码,但黑客仍然通过身份验证并且可以访问系统!

据我所知,身份验证 cookie 无法在服务器端以外的任何地方解密,不是吗?

将密码或密码哈希作为自定义声明存储在身份验证 cookie 中是否安全,以便我稍后进行比较并从受歧视的用户中删除身份验证? 它的最佳做法是什么?还是我在做或问完全错误的事情?

【问题讨论】:

  • 您可以实现刷新令牌来为令牌添加过期时间。即使黑客得到了你不知道什么时候的它,它仍然会过期。
  • 是的,这是一个好主意,我错过了它,但有点复杂,因为我需要存储额外的数据,而我已经有一个可以更改的密码。如果黑客(理论上)无法解密 cookie 而我可以在那里存储密码,为什么不呢?或者他可以吗?
  • 您永远不能假设黑客无法解密您的数据。 Refresh Token 仅用于此目的,因此用户不能长时间滥用访问令牌。
  • 怎么样,假设您实现了刷新令牌并且您的用户登录了。他现在获得了一个用于身份验证的令牌。不知何故,一个黑客抓住了那个令牌。用户快速更改密码,因此如果更改密码成功,您可以强制使之前的令牌过期并授予用户一个新令牌。黑客现在有一个过时的令牌。
  • @norekhov 自己实现安全从来都不是一个好主意。 ASP.Net 身份团队考虑了您所说的所有场景。请查看 ASP.Net Identity,以便即使您不打算使用它也能获得灵感。

标签: c# asp.net authorization


【解决方案1】:

据我所知,身份验证 cookie 无法解密 除了服务器端,不是吗?

身份验证 Cookie 使用机器密钥加密。没有机器密钥很难解密,但也不是不可能。

将密码或密码哈希作为自定义声明存储在 身份验证 cookie,以便我稍后进行比较并删除 来自受歧视用户的身份验证?什么是最佳实践 它?还是我在做或问完全错误的事情?

不,您不想在声明中存储密码。它不会解决黑客问题,甚至不会让它变得更糟。

您可以实现security stamp 之类的 ASP.Net Identity,它基本上可以从任何地方注销用户。

【讨论】:

  • 好的,我明白了。我使用了“身份验证”库。我错过的是“身份”库。就我而言,我认为手动实现它比使用 Identity lib 更容易。谢谢!
猜你喜欢
  • 2013-11-12
  • 2015-03-06
  • 1970-01-01
  • 2014-03-26
  • 1970-01-01
  • 2016-03-31
  • 2012-09-27
  • 1970-01-01
  • 2015-08-27
相关资源
最近更新 更多