我使用RESTful API構建基於Pylons的Web應用程序,該應用程序當前缺少任何驗證。所以我要實現這一點,爲了避免所有存儲用戶密碼的麻煩和謹慎,我想使用OpenID進行身份驗證。什麼是最好的方法來做到這一點?這兩件事是否兼容?是否存在使用OpenID的現有REST API,我可以從中獲得靈感?如何在RESTful API中使用OpenID?
回答
我現在已經花了一些時間研究這些選項並希望總結研究結果。首先,多一點上下文 - 我開發和控制服務和API消費者。消費者是基於Flash的應用程序,它從API現在使用的相同主機提供,並且應該在瀏覽器中使用。目前還沒有第三方客戶。
所以,問題可以分爲兩個部分進行劃分,
- 我怎麼通過API做OpenID身份驗證
- 我怎麼維持後續的請求「認證」狀態
對於第一部分,OpenID身份驗證幾乎總是包含交互式步驟。在認證過程中,很可能會有一個步驟,用戶在OpenID提供商的網頁中,登錄並按下一些「我同意」按鈕。所以API不能也不應該透明地處理這個問題(沒有「告訴我你的OpenID提供者和密碼,我會做其餘的」)。它能做的最好的是傳遞和返回客戶端必須打開並遵循指示的HTTP鏈接。
保持「認證」狀態
的REST API應該是無狀態的,每個請求應包括處理它,正確的所需的所有信息?對於每個請求對OpenID提供者進行身份驗證都沒有任何意義,因此一些類型的會話是必需的。一些用於通信會話密鑰(或「訪問令牌」或用戶名/密碼)選項有:
- HTTPS +基本身份驗證(「授權:基本...」在每個請求頭)
- 簽名請求Amazon-style(「授權:AWS ...」中的每個請求頭)
- 的OAuth:獲取訪問令牌,包括並在其存儲會話密鑰(「曲奇每個請求
- 曲奇一羣其他參數:... 「每個請求中的標題)
- 存儲會話信息的簽名cookie在餅乾本身
現在只有一個API消費者,所以我選擇了最簡單的事情,可能工作 - 餅乾。在Beaker的幫助下,它們非常易於在Pylons中使用。他們也在Flash應用程序中「正常工作」 - 因爲它在瀏覽器中運行,所以瀏覽器將在Flash應用程序發出的請求中包含相關的Cookie - 根本不需要更改應用程序。這裏有一個StackOverflow問題,也提倡使用cookies:RESTful authentication for web applications
燒杯也有很好的功能cookie-only sessions所有的會話數據都包含在cookie本身。我想這是關於無狀態的。服務器上有沒有會話存儲。 Cookies被簽名並且可選地被加密以避免在客戶端篡改它們。缺點是cookie變得更大一些,因爲它現在需要存儲更多的會話密鑰。通過刪除一些我在會話中不需要的東西(來自OpenID身份驗證的剩菜),我將cookie的大小降低到了大約200字節。
OAuth更適合API使用。以下是Python中使用的OAuth示例:oauth-python-twitter。 Leah Culver的python-oauth庫是Python中OAuth的規範實現,但python-oauth2是最近引起一些嗡嗡聲的競爭者。至於靈感,django-piston支持在爲Django創建RESTful API時使用OAuth進行身份驗證,儘管文檔不如我想要的那個特定主題。
如果您構建API,則可以檢查OAuth協議。它是OpenID的補充。
- 1. 你如何使用Restful API?
- 2. 在Android中使用RESTful API
- 3. 如何在RESTful API中
- 4. 使用RESTful API
- 5. 如何使用asp.net mvc4的OpenID API
- 6. 如何使用獵鷹的RESTful API
- 7. 如何使用Java servlet創建RESTful API?
- 8. 我該如何使用Auth0與RESTful API?
- 9. 如何在任何python框架中使用python flask RESTful api
- 10. 應該在RESTful API中使用視圖
- 11. 在RESTful API中使用乾淨網址
- 12. 在node.js中調用restful api
- 13. 如何在Laravel 5.2中驗證RESTful API?
- 14. 如何在Laravel 5中驗證RESTful API?
- 15. 如何在Perl中實現RESTful API?
- 16. 如何在RESTful API中處理參數
- 17. Google OpenID - 如何在javascript中使用checkid_immediate?
- 18. 如何在yii中使用openid?
- 19. 如何在joomla中使用openid?
- 20. 如何使用CodeIgniter在RESTful API中發送帖子值?
- 21. 如何在restful java api(JAX-RS,Jersey)中使用mysql db?
- 22. 如何在我的Java RESTful API中使用Zapier
- 23. 如何在NativeScript中連接Web Service使用API RESTful服務?
- 24. 如何在jsp頁面中使用restful api(返回json)
- 25. 如何在asp.net中使用docusign restful api發送pdf?
- 26. 使用RESTful api與骨幹
- 27. 使用RESTful API - 安全嗎?
- 28. 如何在drupal 8中使用RESTful webservice?
- 29. 如何在Restful Webservice中使用XmlSerializerFormat?
- 30. 如何在RESTful URL中使用slugs?
API目前主要針對客戶端 - 服務器場景。客戶端是Flash應用程序,服務器是Pylons web應用程序。目前沒有服務器到服務器的東西,所以不需要三條腿的東西。我目前的問題是如何在系統中引入「認證用戶」,而不必處理存儲密碼,發送密碼提醒,重置密碼等。目前還不清楚OAuth如何幫助我,因爲在2腳版本中它只是指定了如何簽署請求。 – 2009-12-02 15:23:24
在這種情況下,可能是http://pylonshq.com/pasties/by_tag/openid中的一個粘貼會有所幫助。 – 2009-12-02 16:06:56