2013-04-17 170 views
0

如何在Rails應用程序中存儲用戶的API密鑰?請注意,我正在談論成爲資源提供者,即API密鑰是我的服務。在Rails 3應用程序中安全地存儲API密鑰

比方說,我們有一些資源,我們有1000個API密鑰給它,它允許用戶訪問該資源。

天真的方法是將其存儲在純文本,但如果數據庫被攻破 - 所有API密鑰都不見了。

聰明的方法是存儲散列和醃製,但那就意味着我會是這樣的:

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

這是非常耗時的(1000散列比較)。

我不能做搜索,因爲哈希加鹽。

谷歌對這個問題保持沉默。

關於如何更有效地實施它的任何想法?

回答

0

這取決於您的應用需求。您是否曾經在生成完API後向用戶展示他們的API密鑰?如果是這樣,您需要將其存儲爲明文或使用某種可逆加密。

如果你哈希和鹽的API密鑰,您的查詢可以簡化爲:

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

http://pastebin.com/NKhaCnif 基本上,你不能搜索,除非你每次使用相同的鹽(否則 - 默認情況下 - 相同的密碼每次生成不同的哈希) - 這是問題的關鍵。如果鹽是相同的 - 這是不安全的。不,我不打算向用戶顯示API密鑰。 –

+1

我想你可能會被卡住。 :(希望有一個比我更瞭解的人可以一起來展示我們兩個。 – girasquid

0

也許你可以存儲API密鑰以純文本的前幾個字符,存儲旁邊的加密(醃製)完整的API密鑰在你的數據庫中。

相關問題