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



我希望提高负载不足的应用程序的性能,该应用程序的大部分处理时间都花在身份验证过程中(用户名/密码验证)。

我对应用程序密码的存储和验证方式感到满意(经过多次迭代,对其进行了处理和散列),问题是身份验证过程很慢,而且需要占用CPU(这是应该的)。

应用程序会收到一连串的消息,并且传入的每个消息都会经过身份验证。具体来说,我想做的是实现一个短期缓存(120秒),如果用户名/密码被成功验证,那么在缓存窗口中使用相同用户名/密码的任何其他请求都会被验证,而不需要经过缓慢的多次迭代验证过程。

基本工艺流程为:

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

缓存将是内存中的缓存,但我的问题是,我需要如何"安全"地将数据放入缓存(用户名/密码)。这是性能和安全性之间的权衡。。。以及安全到什么程度。

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

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

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

最新更新