2013-08-05 41 views
9

我正在使用RESTful API將服務器端Web應用程序轉換爲單頁JavaScript應用程序。目前。用戶可以使用Facebook,Twitter,Google等或通過電子郵件和密碼進行身份驗證。我如何允許通過RESTful API運行相同形式的身份驗證?我猜它看起來是這樣的:使用第三方Oauth提供程序對API的用戶進行身份驗證

  1. 在客戶端提供商進行身份驗證。
  2. 從Oauth響應中獲取一些內容並將其傳遞給我的服務器上的API以換取訪問令牌。
  3. 對後續API調用使用基於令牌的身份驗證。

我在正確的軌道上嗎?如果是這樣的話:

  1. 是否有一個處理多個提供程序的JS庫,還是每個需要包含類似Facebook的JS SDK之類的東西?
  2. 我的API應該如何生成令牌?特別是,我需要從Oauth提供商那裏得到什麼,以及如何在服務器上驗證它?

回答

2

這將是您更輕鬆地處理認證過程對服務器端,而不是在客戶端的身份提供者。 因此,您的REST服務器應該支持自己的身份驗證方法(也可以基於OAuth),並將其傳輸給第三方提供商。因此,一個流程將是這個樣子:

  1. 啓動一個登錄過程從客戶端(JS) - 打電話給你的REST權威性端點,指定要登錄到網絡(例如myserver.com/login?provider =臉譜)。

  2. 處理服務器端的登錄過程 - 重定向到提供者登錄端點,接收登錄回調,處理響應(獲取facebook會話令牌等)。

  3. 發行自己的用戶會話(如果你正在做的OAuth或令牌),以及您的JS響應客戶端回。

有一對夫婦的社會登錄庫,可以幫助你,請爲Java http://hybridauth.sourceforge.net/爲PHP或http://code.google.com/p/socialauth/的。

也有一些商業解決方案,可以讓你的生活變得更容易(我正在爲Gigya工作,所以我有偏見),但那只是如果你有預算。

+0

謝謝,這從技術角度來看是有道理的。我是從一個UX-角度思考,希望有一些方法來留在我的單頁的應用程序中,而不會重定向。它看起來像使用自己的Facebook SDK JS是可能的,但可能不會更普遍。 –

+0

您可以通過打開彈出框來避免從您的頁面重定向。您不必從單個頁面重定向到您的登錄REST端點,您可以打開該端點的彈出窗口,並且在該彈出窗口中將重定向到IDP(如Facebook)。在登錄過程結束時,您必須使用登錄響應和會話從彈出窗口向主頁上的JS發出信號。 –

+0

完美!由於我只在一個窗口內工作,所以我沒有想到在彈出窗口和頁面之間進行通信。 –

6

我會建議生成一個API訪問鍵或使用專門爲您的API的單獨的OAuth流程。從概念上講,您需要將創建帳戶的行爲與服務分開,並連接遠程帳戶。你可能會拉下你所描述的內容,但這會令人困惑。

對於客戶端將OAuth更容易,退房oauth.io

相關問題