簡體   English   中英

如何為RESTful Web應用程序實現身份驗證?

[英]How can the authentication be implemented for RESTful web applications?

我正在用JavaScript(客戶端)和Python / Google App Engine(服務)編寫Web應用程序,我希望用戶在其中添加數據。 我創建了一個歡迎頁面,其中將帶有登錄/注冊框。 輸入正確的用戶名/密碼后,我希望對用戶進行授權,然后將其轉發到Web應用程序頁面,並使用戶使用指定的用戶ID(即(host / {userid} / some_resource))向RESTful服務發送AJAX請求-在服務方面,請確保用戶已獲得授權。

我該如何做到這一點並確保一切安全(即,永遠不要以明文形式發送用戶名/密碼)? 我找到了一些“流行詞”,例如“ HTTP身份驗證”和“會話”,但找不到關於如何實現此類事情的可靠且清晰的文章。

我還想知道不同的流行站點如何處理授權(即GMail通過HTTPS工作; Stackoverflow和Facebook似乎使用HTTP)。

我不喜歡重新發明輪子,所以我建議您選擇GAE具有的內置Google帳戶(或OpenID)集成,或者建議使用Django用戶身份驗證。

GAE python上的Google帳戶/ OpenID: http : //code.google.com/appengine/docs/python/users/

Django身份驗證: https//docs.djangoproject.com/en/dev/topics/auth/

這樣,您便擁有了管理用戶所需的一切,並且使用Django,您還獲得了權限框架。

基本上,您想要的是會話。 當用戶登錄服務器時,他們會返回一個唯一的令牌,該令牌指定系統中的會話或用戶。 每當用戶發出后續請求時,他們都會傳回令牌,以便服務器可以對其進行檢查並確保允許用戶執行他們想做的所有事情。

在Web應用程序中,通常會在服務器端創建一個會話,並將令牌作為cookie傳回。 用戶瀏覽器將在每次請求時自動將此令牌發送到服務器,以便服務器可以看到用戶已通過身份驗證。 這就是Gmail,Stack Overflow和Facebook(以及幾乎每個網站)的功能。

如果您想在GAE上為此使用cookie,則可以使用內置的Google用戶系統,它將自動創建會話和cookie,而您所要做的就是使用users API確定誰登錄(請參閱用戶示例)。在GAE文檔中)。 如果您不想使用Google用戶系統(因為您不想要求用戶擁有Google帳戶),則可以推出自己的會話系統或使用已建立的庫,例如GAE-Sessions(https:// github .COM /抓住過/ GAE的會話)。 該網站上有一些示例代碼說明了如何使用它。

此外:Web瀏覽器未嚴格使用的RESTful API通常不使用cookie進行身份驗證。 他們或者為每個用戶(當創建用戶時)創建一個令牌,或者在用戶登錄時(在登錄請求的響應中將令牌傳回),然后用戶將令牌作為請求傳遞回服務器。參數或HTTP標頭。

在上述兩種情況下,您都可以通過HTTPS進行登錄,而通過HTTP進行其余的操作,這樣就可以工作,而無需您進行任何額外的工作,但是從客戶端傳遞到服務器的令牌將通過HTTP不安全地發送不好 許多會話系統會跟蹤會話所屬的IP地址,因此,如果有人嘗試通過復制他們無法進入的令牌來劫持會話,但是除非有充分的理由,否則您應該對所有內容都使用HTTPS。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM