2010-04-20 117 views
2

我在開發將由每個操作一個REST API的各種網絡服務的支持PHP的社交媒體網絡應用程序的中間。 Web服務可能會用Java來實現與MySQL數據層但我試圖做整點是使它真正容易實現的模塊在不同的語言/數據存儲取決於什麼是approriate。保護一個REST API

因此,例如,當用戶通過登錄表單登錄到應用程序時,PHP代碼連接到Web服務並POST用戶名和密碼來檢查它們是否應該進行身份驗證。我通常在這一點上開始一個會話並將其存儲在會話數據存儲中。

另一個例子可能是用戶向另一個用戶發送私人消息。該消息將被髮送到私人消息傳遞Web服務,該服務將處理所有的存儲。同樣,可以聯繫Web服務來檢索用戶的消息。

儘管我理解如何在Java中實現REST Web服務並在PHP中建立連接,但我完全不確定如何保護傳遞的數據並確保它是返回的用戶數據。例如,如果我想讓所有用戶作爲私人消息,Web服務如何知道返回該用戶。我能通過用戶標識符作爲GET URL的一部分,但話,想必任何舊的用戶可以只找出GET網址,並使用它來查找其他人的消息。我想也許我可以通過會話標識符和IP地址,這將允許我檢查會話數據存儲並確保它是正確的用戶?

爲了保護重要的數據 - 比如用戶名/密碼,我想我只是通過SSL傳遞它。

希望這說明我的問題更好。

感謝

+0

你制定Internet或Intranet的解決方案?你使用微軟產品(ASP.NET MVC或WFC 3.5/4.0)來創建服務和IIS來承載這個?你想要認證或隱私?隨着更多的信息,你可以得到更好的答案。 – Oleg 2010-04-21 16:39:14

+0

根據Olegs評論,我添加了更多信息。對於上一個問題的模糊不清 - 寫得非常深夜! – christophmccann 2010-04-21 21:52:28

回答

2

看看HTTP摘要式身份驗證。大多數客戶端應該支持它,這意味着認證詳細信息可以作爲頭部的一部分安全傳遞,而不會干擾請求本身的有效負載。

-1

這些基本上是2個問題。

當隱私是一個問題時,我會選擇最安全的選項:通過SSL服務數據(通過HTTPS)。

就認證而言,有幾種可能性。基本SSL是其中之一,但帶有cookie的簡單登錄表單可以是另一個。 (例如ASP.Net Forms Authentication)。這完全取決於你想如何實現你的認證機制。

+4

登錄表單不適用於API。 – 2010-04-20 15:58:32

1

我覺得需要OAuth是一個不錯的選擇。您的最終用戶應該明白其他網站不需要詢問用戶名和密碼來訪問他們的數據。就SSL而言,如果可以的話,這顯然是值得的。您必須查看性能權衡是否可以接受。

0

請記住,您的API必須模仿HTTP協議。

Http是無狀態的,並且通過添加任何會話等,您試圖僞造一個「Alwaysconnected」方法。

隨着LoginForm的,它就像我得寄每個呼叫的兩個請求;)

+0

因此,如果我有一個Web應用程序,用戶登錄 - 我通常會創建一個會存儲在數據庫中的會話。我的計劃是使用PHP作爲頁面構建的最後一部分。因此,該Web應用程序將調用多個寧靜的Web服務來獲取所有數據。但取決於你是誰登錄的,因爲它取決於你返回的數據。所以我認爲你必須通過Web服務進行身份驗證,以便知道你是誰。你是說因爲HTTP協議是無狀態的,它不適合使用REST來做到這一點? – christophmccann 2010-04-20 20:25:51

+1

在我看來,一個API必須簡單的實現,其名稱... 通過使用會話,你約束開發人員有一個cookie機制是不是? 如果你只是使用HTTP認證,那麼使用http://php.net/manual/en/features.http-auth.php的東西可能就足夠了。 – dzen 2010-04-20 21:19:26