0

我希望提高在负载下将大部分处理时间用于身份验证过程(用户名/密码验证)的应用程序的性能。

我对应用程序密码的存储和验证方式(经过多次迭代加盐和散列)感到满意,问题是身份验证过程很慢并且 CPU 很饿(应该是这样)。

应用程序会收到大量消息,并且传入的每条消息都经过身份验证。具体来说,我正在做的是实现一个短期缓存(120 秒),如果用户名/密码成功通过身份验证,那么在缓存窗口期间进入的具有相同用户名/密码的任何其他请求都将通过身份验证,而无需经历缓慢的多次迭代认证过程。

基本流程将是:

  1. 检查用户名是否有效且帐户未锁定(暂停/重试次数过多/密码最近更改)
  2. 检查缓存以查看用户名/密码条目是否存在
    • 缓存中没有条目:通过身份验证算法传递提供的密码,并与存储在数据库中的值进行比较。如果匹配,则对用户进行身份验证并将条目添加到缓存中
    • 缓存中的条目:提供的用户名/密码与在缓存窗口中验证的用户名/密码相同,因此验证用户。
  3. 缓存会自动过期条目

缓存将是内存中的缓存,但我的问题是我需要如何“安全”才能使我放置在缓存中的数据(用户名/密码)。它是性能和安全性之间的权衡……以及足够安全的安全性。

例如,以下是用于缓存的合理键:

  • 用户名 + 哈希(盐 + 密码)
4

1 回答 1

0

我怀疑您真正想要做的是发出一个在接下来的“n”秒内有效的令牌/票证。令牌将被加密/签名,这样您就可以单独验证它并检查是否过期(从而防止重放攻击)

于 2013-08-05T15:08:45.587 回答