2010-10-21 92 views
4

我正在處理REST Web服務,特別是基於瀏覽器請求的身份驗證方法。 (使用JsonP或跨域XHR請求/ XDomainRequest)。基於瀏覽器的REST API身份驗證

我在OAuth和亞馬遜的AWS上做了一些研究。兩者的一大缺點是,我需要做以下任一操作:

  • 商店祕密憑證在瀏覽器
  • 讓一個服務器端腳本處理的簽字儀式。基本上,我首先會向我的服務器發送一個請求,以獲取特定的預簽名JavaScript請求,我將使用它來連接到真正的REST服務器。

有什麼其他的選擇或建議?

回答

1

那麼,這裏唯一真正的答案是通過服務器代理,使用會話/ cookie進行身份驗證並且當然使用SSL。抱歉回答我自己的問題。

0

是的,jsonp呼叫認證非常困難,因爲瀏覽器客戶端需要知道共享密鑰。

一個選項是使終點匿名(不需要驗證)。這與其他安全整體(服務器對攻擊是開放的,任何人都可以稱之爲)有關。但是,您可以通過僅暴露非常有限的資源和/或使用速率限制來處理此問題。通過速率限制,一個客戶在一定的時間範圍內只允許一定數量的呼叫。它通過識別客戶端來工作(例如通過源碼或其他客戶端腳印)。

我曾經嘗試過一次性令牌,但它們都有些失敗,因爲您有獲取令牌本身的問題,並且保護了機器人對令牌的多次檢索(這又來了速率限制的需要)。

+0

什麼是安全整體而? – BigJoe714 2010-10-21 16:58:42

+0

對不起...晚上打字/拼寫,今天早上可能會用到這個術語漏洞;) – 2010-10-21 17:24:01

+0

我正在考慮與有限時間的多請求令牌一起使用..:S – Evert 2010-10-21 19:00:50

0

我還沒有嘗試過這個自己,但你可以嘗試以下。(我敢肯定我會得到一些反饋)

在服務器端,生成一個時間戳。使用HMAC-SHA256,使用密碼爲該時間戳生成密鑰,並將生成的密鑰和時間戳發送到html中。

當您對Web服務進行AJAX調用(假設它是一個不同的服務器)時,請將密鑰和時間戳與請求一起發送。檢查時間戳是否在5-15分鐘之內..如果是,請執行帶有相同密碼和密鑰的HMAC-SHA256,如果生成的密鑰相同,則使用 。 同樣在客戶端,你必須檢查,如果你的時間戳仍然在進行調用之前有效..

你就可以使用以下網址的關鍵.. http://buchananweb.co.uk/security01.aspx