在Rails 3应用程序中安全地存储API密钥

时间:2013-04-17 19:37:01

标签: ruby-on-rails api-key

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

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

天真的方式是将其存储在纯文本中,但如果数据库受到损害 - 所有API密钥都消失了。

聪明的方法是存储哈希和盐渍,但这意味着我必须这样:

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

这非常耗时(1000次哈希比较)。

我不能进行搜索,因为哈希被腌制了。

谷歌对这个问题很安静。

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

2 个答案:

答案 0 :(得分:0)

这很大程度上取决于您的应用要求。在您生成API密钥后,您是否会向用户显示其API密钥?如果是这样,您需要以明文或某种可逆加密方式存储它。

如果您正在对API密钥进行哈希处理,那么您的查询可以简化:

ApiKeys.where(resource: '....', password: hash_and_salt(params[:api_key]))

答案 1 :(得分:0)

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