2011-04-03 18 views
1

這是我的情景......如何生成一個有時間限制的密鑰或密碼不存儲數據

  1. 用戶客戶端應用程序用於訪問Web服務的請求。

  2. Webservice的一個「重點」,即僅適用於X秒/分鐘(時間可能是在我的web服務變量或至少定義)

  3. 用戶的客戶端應用程序使用的關鍵立即做出響應進一步要求。

  4. Web服務會檢查密鑰是否仍然有效,並且是否繼續執行請求,否則會相應地作出響應。

我需要做的這一點沒有實際存儲在數據庫中,所以我猜測,在生成密鑰(與鹽)使用的哈希應該根據時間莫名其妙的關鍵。

我想我真正要問的是做這件事的最好方法是什麼。

語言:VB.Net

回答

0

在我們與去端部下面....

已知的應用 的用戶名稱 的當前日期/時間+5秒

結合上述特定的順序的鹽作爲一個字符串和MD5哈希它。

我們有一個特殊的URL,他們可以用散列作爲查詢字符串參數。

我們將散列與請求時生成的5個散列進行比較(一個用於當前秒和前一個4秒中的一個)。如果QS參數上的哈希值與生成的這5個哈希值之一匹配,則我們接受請求並執行相關操作。

我們的API上有一個方法,它返回一個已經應用了散列的URL。然後API客戶端可以將他們的請求發送到立即提供的URL。任何在檢索到URL後超過5秒的請求都會被拒絕。

所以我們有一個從生成時間起只有5秒的密鑰。

這使我們能夠爲用戶提供從API客戶端「自動登錄」他們網站的能力。客戶端請求登錄URL(隨附哈希),然後立即將用戶的Web瀏覽器指向該URL。 URL處理請求,檢查散列,以及是否有效設置登錄cookie並將它們重定向到其管理頁面。

簡單,有效,而且,因爲我們所有的API請求都是通過SSL進行的,所以安全。

+0

會不會受到會話劫持的影響? – yadab 2012-02-11 12:53:14

+0

如何?任何試圖劫持它的人都必須知道鹽和用戶正常的憑據才能生成密鑰。由於用於檢索密鑰的網絡服務以及使用密鑰的URL都覆蓋了SSL,因此應該足夠安全。 – Hades 2012-02-12 16:23:43

+0

什麼是「正常憑證」? – yadab 2012-02-13 15:36:08

1

你不會得到解決存儲的關鍵地方,哈希的本質是,你不能讓它產生出的信息。如果您想要取回信息,請改用加密算法。

+0

這是錯誤的。如果我知道鹽,那麼基於時間(自1970年1月1日以來的分鐘數)在未來2分鐘的哈希將允許我檢查有效性並給哈希一個2分鐘的生命期。我想知道的是,這是實現這一目標的最佳方式,還是有更好的方式,也不涉及將散列存儲在數據庫中。 – Hades 2011-04-04 07:50:11

+0

您正在使用HTTP的無狀態傳輸系統。沒有辦法以某種方式或形式保存散列,而數據庫是最好的方式。 – Femaref 2011-04-04 11:01:36

+0

@Femaref我同意你需要存儲一些信息。但是您不能單獨使用加密進行身份驗證。在這種情況下的解決方案之一可以一次性密碼。 – yadab 2012-02-11 13:00:56

0

我們爲此使用了第三方工具。它被稱爲Crypkey。 非常可配置但不便宜。

+0

謝謝,但我們沒有創建產品密鑰。我們的系統有客戶和經銷商。我正在嘗試創建一個API系統,允許經銷商檢索一個密鑰,然後他們可以傳遞一個URL作爲其經銷商帳戶登錄到他們自己客戶的任何管理區域。 – Hades 2011-04-04 07:54:03