2014-04-01 84 views
1

我一直在爲我公司的網站製作標準化的JSON API;我希望有一種驗證用戶使用API​​的方法,同時儘可能保持API無狀態。我的想法是以下幾點:按請求API密鑰

  1. 用戶登錄,Web服務對用戶進行認證,並生成被傳遞到客戶端,與到期日期一個隨機字符串。這存儲在cookie中,以及數據庫中的條目。

  2. 對於每個API請求,Web服務都會根據數據庫條目檢查cookie字符串。如果進行身份驗證,Web服務將生成一個新字符串,將舊字符串替換爲數據庫中的新字符串和Cookie,然後發回請求的信息。

  3. 如果客戶端發送一個請求,並在數據庫中的字符串設置爲NULL cookie不匹配的數據庫條目和客戶端必須再次登錄,並從步驟啓動過程1.

  4. 如果在到期日期之後發送請求,則數據庫中的字符串將設置爲NULL,並且用戶必須再次登錄。

我想造成儘可能少的干擾儘可能與我公司目前的設置爲我們慢慢過渡到新技術。這種方法通常是做什麼的?如果我這樣做,會遇到什麼樣的安全問題?我應該使用不同的方法嗎?

回答

0

是的,這是一種常見的情況。你所描述的是一個會話cookie並被廣泛使用。

您可能想要閱讀Session Fixation技術和減輕這些技術的方法。

但是使用會話並不是真正的無狀態。如果您可以向API消費者提供密鑰(共享密鑰),則還可以考慮使用消息簽名來驗證請求。確保你使用的是(H)MAC。另外請確保你從Replay Attacks以上。

+0

難道我這樣做的方式 - 會話ID永遠不能使用兩次,即使在同一個用戶 - 幫助避免重播攻擊? –

+0

重放攻擊在簽名郵件區域更加有趣。會議固定是爲你的會議。對於您的具體情況,您應該選擇兩種方法之一(會話或消息簽名)。簽名是無狀態的,但需要您安全地交換密鑰(這可能在您提供API時起作用)。 – seong

相關問題