2012-07-16 66 views
10

我正在創建一個基於Web的服務,我想將其作爲REST API公開,以便開發人員能夠使用它創建應用程序。我希望開發人員能夠創建/管理用戶帳戶並通過API進行身份驗證。如何處理這個? OAuth或其他東西?如何實現REST API的認證?

我正在使用python,flask,mongodb。

回答

10

我們使用OAuth 2(這比OAuth 1更好)決定使用以下內容。特別是我們正在使用流程resource owner password credentials。至於如何將其整合到我們的RESTful服務,這裏的理念是:

  • 的初始資源,未授權的用戶擊中時,會返回一個401的401的主體包含一個鏈接,用rel=oauth2-token。 (信號鏈接的方式取決於您的媒體類型;我們使用的是HAL,但您甚至可以使用Link標頭。)
  • 用戶驗證後,他返回到初始資源,在他的Authorization標題中發送持票人令牌從OAuth 2進程返回。在這一點上,我們返回一個200,並提供所有正常的鏈接。

我們不公開帳戶創建,但是如果您想這樣做,我會在初始資源中爲未授權用戶提供另一個鏈接。該鏈接將具有自定義rel,因爲它是特定於您的應用程序的,例如, rel=http://rels.myapi.com/users

良好的REST風格的設計表明與此rel的鏈接指向例如並且API的消費者對該端點執行POST,該端點向其返回新的用戶資源,其中Location頭指向新創建的用戶資源,例如, http://myapi.com/users/username。 (用戶資源本身當然是另一個rel,區分單一用戶資源和多個用戶收集資源。)