如何在Rails应用程序中存储用户的API密钥?请注意,我说的是作为资源提供者,即API密钥是我的服务。
假设我们有一些资源,我们有1000个API密钥,允许用户访问此资源。
天真的方式是将其存储在纯文本中,但如果数据库受到损害 - 所有API密钥都消失了。
聪明的方法是存储哈希和盐渍,但这意味着我必须这样:
ApiKeys.where(resource: '....').each do { |key| key.password == params[:api_key] }
这非常耗时(1000次哈希比较)。
我不能进行搜索,因为哈希被腌制了。
谷歌对这个问题很安静。关于如何更有效地实施它的任何想法?
答案 0 :(得分:0)
这很大程度上取决于您的应用要求。在您生成API密钥后,您是否会向用户显示其API密钥?如果是这样,您需要以明文或某种可逆加密方式存储它。
如果您正在对API密钥进行哈希处理,那么您的查询可以简化:
ApiKeys.where(resource: '....', password: hash_and_salt(params[:api_key]))
答案 1 :(得分:0)
也许您可以将api密钥的前几个字符存储为纯文本,并将其与数据库中加密(加盐)的完整api密钥一起存储。