2011-08-31 73 views
0

我們有一個基於Web的應用程序,我們不需要最終用戶登錄。應用程序使用Ajax調用託管在同一臺服務器上的REST服務。除此應用程序之外,我們還要確保如果其他應用程序/代理程序調用REST服務,它們將被拒絕。保護來自不安全頁面的JavaScript的REST調用

保護這樣的REST API的最簡單方法是什麼?我的猜測是我們會包含某種安全令牌並通過HTTPS進行呼叫。但是我不清楚Ajax應用程序如何創建/獲取/加密令牌,以及生命週期的外觀。

如果可能的話,我寧願在Spring Security或OAuth之外進行此操作。我還讀到通過SSL發送用戶名和密碼足以進行身份​​驗證。在這種情況下,應用程序將擁有「用戶名」和密碼,並且會將其發送到REST服務的每個請求。但是如果客戶端在瀏覽器中只是HTML和JavaScript,它將如何保持這些信息的祕密?

謝謝。

+0

[保護REST API/Web服務的最佳實踐]的可能重複(http://stackoverflow.com/questions/7551/best-practices-for-securing-a-rest-api-web-service) –

回答

0

一般來說這是不可能的。有人可以在javascript上查看源代碼,閱讀令牌,然後做任何他們想要的。

https在這裏沒有必要。對於令牌,最簡單的方法是在他們從服務器下載JavaScript時設置cookie,然後該cookie也將隨任何AJAX請求一起傳輸。

這不是真的安全 - 任何人都可以看到cookie是什麼並使用它,但它是你可以做的最好的。

+0

給予http://stackoverflow.com/questions/5511589/securing-an-api-ssl-http-basic-authentication-vs-signiture的答案似乎表明SSL需要加密cookie(防止MITM攻擊)。我很高興將安全令牌放入標頭或cookie中。在這種情況下,我只是不確定一個不安全的頁面如何安全地獲得令牌? – pastafarian

+1

我不清楚你想要保護什麼,我想你也是。所有攻擊者需要做的就是下載javascript - https,並且他們擁有cookie。既然他們擁有cookie,他們就可以將他們想要的任何內容發送到REST服務,並且您無能爲力。停止MITM攻擊是完全不同的事情,並且不會做任何事情來確保「如果有任何其他應用程序/代理調用他們被拒絕的REST服務」 - 另一個應用程序不需要MITM,他們可以直接調用自己的服務。 – Ariel

+1

謝謝。我想也許我隱約地提出了這個問題。我想確定兩件事情:1.沒有人可以從瀏覽器下載代碼,並能夠假冒對服務的調用,就好像它來自經過批准的支持Ajax的應用程序,並且... 2.沒有人可以嗅探導線並獲取正在運輸的驗證信息。 (因此需要SSL) – pastafarian