缓存身份验证状态以提高后续邮件的性能

时间:2013-08-05 15:04:04

标签: java performance security

我正在寻求提高在负载下花费大量处理时间的应用程序在身份验证过程中的性能(用户名/密码验证)。

我对应用程序密码的存储和验证方式感到满意(通过多次迭代进行盐水和散列),问题是验证过程缓慢且CPU耗尽(应该是这样)。

应用程序获取消息突发,并且每个进入的消息都经过身份验证。 具体来说,我正在做的是实现一个短期缓存(120秒),如果用户名/密码成功通过身份验证,那么在缓存窗口中使用相同用户名/密码进入的任何其他请求都将被验证,而无需经历了缓慢的许多迭代认证过程。

基本流程将是:

  1. 检查用户名是否有效且帐户未锁定(暂停/重试次数过多/密码最近更改)
  2. 检查缓存以查看是否存在用户名/密码的条目
    • 缓存中没有条目:通过验证算法传递提供的密码,并与存储在数据库中的值进行比较。如果匹配,则用户通过身份验证并将条目添加到缓存
    • 缓存中的条目:提供的用户名/密码与缓存窗口中经过身份验证的用户名/密码相同,因此对用户进行身份验证。
  3. 缓存会自动过期条目
  4. 缓存将是内存缓存,但问题是我需要如何'安全'来生成我放在缓存中的数据(用户名/密码)。它在性能和安全性之间进行权衡......以及安全性如何足够安全。

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

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

1 个答案:

答案 0 :(得分:0)

我怀疑你真正想要做的是发出一个有效的下一个'n'秒的令牌/票证。令牌将被加密/签名,以便您可以单独验证它并检查到期时间(从而防止重放攻击)