【问题标题】:HTTP Basic for API - How to "reduce" credential encryption?API 的 HTTP Basic - 如何“减少”凭证加密?
【发布时间】:2013-10-19 00:28:57
【问题描述】:

我目前编写了一个 API,它使用基于 TLS 的 HTTP Basic 进行身份验证,我对此非常满意。

现在我提高了密码加密的值(如长度、迭代等),以获得更真实的场景。不幸的是,这使得 API 访问变得非常缓慢,因为我必须一遍又一遍地重新哈希 HTTP Basic 凭据。

解决这个问题最简单的方法是什么(当然除了会话之外)?

【问题讨论】:

  • 请解释“提高密码加密的值”,因为 HTTP 基本访问身份验证不使用加密。
  • @MarcusAdams 确定 HTTP Basic 不使用加密,但我将用户密码作为 pbkdf2 哈希存储在数据库中。所以我需要对授权标头中的普通密码进行哈希处理,并将其与数据库中的密码进行比较。使用真正保存散列参数时,这需要几秒钟

标签: security http encryption basic-authentication


【解决方案1】:

pbkdf2 并不是要被重复调用,事实上,阻止它的速度很慢。这通常与一些基于会话或令牌的身份验证和 SSL/TLS 结合使用。

如果您的缓慢是由于 pbkdf2,并且您不想进行会话或任何类似的基于令牌的身份验证,那么除了放弃或降低 pbkdf2 的迭代之外,您无能为力。

不过,您可能会考虑放弃 HTTP 基本身份验证,但保留 TLS,并进行自己的身份验证,然后保持连接打开以接收其他请求。当然,这也取决于客户是否支持。

另一种解决方案是添加更多硬件来分散负载。由于哈希是在 Web 服务器上完成的,而不是在数据库服务器上完成,因此您可以添加更多的 Web 服务器、Web 服务器 CPU 等,并平衡负载。

【讨论】:

  • 基于令牌的身份验证将是 oauth2-bearer,或者是否有其他可用的可能更简单?
  • 如何保持连接处于活动状态。这是如何运作的?我的意思是即使 TCP 套接字相同,我仍然需要重新发送标头
  • @bodokaiser,我建议使用 PHP 会话之类的简单方法,尽管您可以使用任何将身份验证换成令牌的机制(甚至是您建议的 oauth2)。看看HTTP persistent connectionsConnection: Keep-Alive。您确实每次都发送完整的 HTTP 请求,但无需对每个请求重新进行身份验证,因为 SSL/TLS 可以防止中间人攻击并且您在第一个请求上进行身份验证。
  • @bodokaiser,另一个想法......更多硬件。我更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-31
  • 2021-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多