2013-02-01 84 views
0

我目前正在致力於通過遠程網站提供一些服務的REST/JSON API。我不知道這些網站的最終客戶,他們將/不應該有API服務器上的帳戶。在API服務器上存在的唯一帳戶將是標識網站的帳戶。由於這是全部RESTful,因此所有通信都將在最終用戶瀏覽器(通過javascript/JSON)和我的REST API服務之間進行,因此我如何確保系統不會被有興趣增加中間人賬單的第三方濫用? (中間人是網站轉售我的服務的所有者)。你會推薦哪些驗證方法可以起作用,並且會阻止用戶僅僅從網站獲取js代碼並將其稱爲1000000次,以破壞網站所有者?我正在考慮使用HTTP_REFERER,並將其轉換爲IP地址(以找出哪個服務器託管代碼,並基於此IP進行身份驗證),但我認爲HTTP_REFERER很容易被欺騙。我沒有在API服務器上尋找我的客戶的最終客戶,這會破壞這個API的目的。第三方客戶的休息API(AAA)

有些想法請嗎?

感謝, 丹

回答

0

這可能不是一個選擇,但我已經在這種情況下,以前做是爲了對REST調用上面的代理。該網站調用其自己的內部服務,然後該服務調用您的REST調用。好處是,就像你說的那樣,沒有人可以直接打你的REST呼叫或者試圖欺騙呼叫。

如果沒有這樣做,你可以實現一個像HMAC(http://en.wikipedia.org/wiki/Hash-based_message_authentication_code)這樣的認證方案。我見過很多API使用它。

Using HMAC-SHA1 for API authentication - how to store the client password securely?

這裏是Java代碼可能看起來像驗證:http://support.ooyala.com/developers/documentation/api/signature_java.html

無論哪種方式,我認爲你必須做一些工作服務器端。否則,如果一切都是純粹的客戶端,人們可能能夠對API進行逆向工程。

+0

我想用這樣的東西:讓遠程網站首先打開一個認證鏈接,它將通過$ _SERVER ['REMOTE_ADDR']和服務器IP通過$ _SERVER ['SERVER_ADDR'提供最終用戶IP地址'],然後該API將生成一個將由JS代碼使用的到期令牌,該令牌將授權客戶遠程IP 5分鐘左右。通過這種方式(使用fopen),我可以驗證該IP地址是否來自我們的API來自有效網站,並且該客戶可以在接下來的5分鐘內做任何他想做的事情。你可以看到什麼缺點? – Dan

+0

如果五分鐘過期並且用戶突然不能做什麼,會發生什麼?你們所有的潛在客戶都使用PHP嗎? – ryan1234

+0

他們使用的是無關緊要的,我的API服務器使用PHP並使用$ _SERVER的東西。我假設我可以在js代碼中實現一個計時器,如果用戶在該時間範圍內沒有離開當前頁面,則會每隔300秒通過ajax調用auth文件(執行fopen的文件)。這將更新令牌。 – Dan