0

您将如何在 Rails 应用程序中存储用户的 API 密钥?请注意,我说的是作为资源提供者,即 API 密钥用于我的服务。

假设我们有一些资源,我们有 1000 个 API 密钥,允许用户访问该资源。

天真的方法是以明文形式存储它,但如果数据库遭到破坏 - 所有 API 密钥都消失了。

聪明的方法是存储散列和加盐,但这意味着我必须这样做:

ApiKeys.where(resource: '....').each do { |key| key.password == params[:api_key] }

这非常耗时(1000 次散列比较)。

我无法进行搜索,因为哈希是加盐的。

谷歌对这个问题有点沉默。

关于如何更有效地实施它的任何想法?

4

2 回答 2

0

这在很大程度上取决于您的应用程序要求。您是否会在生成 API 密钥后向用户展示其 API 密钥?如果是这样,您需要将其存储为纯文本或某种可逆加密。

如果您对 API 密钥进行散列和加盐处理,则可以简化查询:

ApiKeys.where(resource: '....', password: hash_and_salt(params[:api_key]))
于 2013-04-17T20:18:36.813 回答
0

也许您可以将 api 密钥的前几个字符存储为纯文本,并将其与加密(加盐)的完整 api 密钥一起存储在数据库中。

于 2017-08-02T18:57:06.820 回答