2012-10-04 35 views
0

我想開發一個簡單的網絡服務,使用Recess,這是一個Web框架,旨在簡單易用並且本質上是RESTful。我發現在Recess中使用CRUD功能非常簡單。我在MySQL數據庫中創建了一個後端模型,並發現REST API已經可以使用。如何在RESTful API中完成用戶身份驗證?

這很好,但問題是我沒有用戶認證,這幾乎使我上面描述的非常好的功能完全無用。在真實世界的應用程序中,需要認證才能訪問用戶特定的資源。例如,假設我正在開發一個簡單的「待辦事項」應用程序(順便說一句,我不是)。用戶對其他人將其列入待辦事項列表的內容不感興趣,因此該服務需要識別用戶是誰,以便提供正確的數據。此外,不應允許用戶閱讀,刪除或更新其他人的資源。

這通常通過登錄系統完成。但是對於REST API,用戶如何驗證?客戶是否需要在每次提出請求時提供用戶的憑證(如用戶名和密碼)?這怎麼可以避免?通常情況下,可以使用cookie,但這可能不是一種好的做法,因爲並非所有的客戶端都必須是網絡瀏覽器。但是,如果我們要模仿cookies的功能,我們如何傳輸「cookies」內容(通常,這是在HTTP標頭中完成的)?最後,我如何在Recess的內置REST功能中集成這些問題的解決方案?如你所見,我對開發REST API相當陌生,所以任何建議和指針都會受到歡迎。

回答

3

RESTful系統利用現有技術已經可用,而不是重新實施它們。由於HTTP已經包含了Basic Authentication形式的認證支持,因此您應該重新使用它。它是客戶傳送憑證的廣泛支持機制。

是的,客戶端應該發送他們的憑據與每個請求。 Cookies適用於不喜歡重複輸入密碼的人類客戶,這種情況並非如此。 Cookies意味着服務器上的會話狀態,並且可能會使可伸縮性變得非常困難。

本網站可能有100個關於RESTful認證的問題。我鼓勵你去搜索和閱讀更受歡迎的。

+0

聽起來像一個計劃。但是,如果我正在製作一個JavaScript Web應用程序來訪問RESTful後端:如果將用戶的憑證保存在某個方便用於請求的地方是不好的做法?如果頁面發生變化,我應該將憑據保存在本地存儲中嗎?當我在開發桌面/移動應用程序時沒有控制權時,有沒有更好的方法? – Hassan

+0

你總是可以加密和散列他們的憑證,這樣你就不會存儲/傳遞明文密碼。使用類似SHA-256的東西,你會保持良好狀態。 –