2011-09-06 71 views
20

我正在構建一個應用程序/ API,允許用戶使用Facebook,Twitter或Google登錄。我想知道允許這些用戶使用相同的帳戶登錄到API的最佳做法是什麼。使用Facebook OAuth保護REST API

  1. 一對夫婦我的想法是將標頭中的auth token/cookie傳遞給API以獲取每個請求並使用它在後端進行身份驗證。
  2. 運行我自己的OAuth安裝程序,並使用戶對後端進行一次驗證,以獲取我的OAuth令牌並從那時開始使用這些令牌。
+0

您提到用戶可以選擇使用Facebook,Twitter和Google登錄。他們是否被迫使用其中一個OpenId提供程序登錄? –

+0

這正是我的問題,解決方案1似乎非常好,但我不明白API如何使用身份驗證令牌來驗證請求。你能解釋一下嗎? – s0nica

回答

1

我正在做同樣的事情,我的解決方案是匹配您從這些各自的API獲得的電子郵件地址。

對於Facebook,您需要最終用戶的特別許可才能獲得在此註冊的電子郵件地址。您可以通過將&scope=email添加到第一個oauth請求來執行此操作。

缺點是您需要從最終用戶獲得此權限,並且他們可能會拒絕。另一個缺點是用戶需要爲Google,Facebook和Twitter使用相同的電子郵件地址。

一個好處是用戶記錄自動合併,所以用戶可以直接訪問他們的所有數據,如果他們第一次通過Google登錄,第二次通過Facebook登錄。

另一種方法是手動合併他們的數據,讓他們在通過Facebook登錄後登錄Google。然後你可以得出結論,即使他們使用不同的電子郵件地址,他們也是同一個用戶。但這是一種更乏味的方法,因爲您仍然需要合併來自兩個帳戶的應用程序的用戶數據。

+0

獲取用戶的電子郵件地址如何以任何方式促進身份驗證? (如果API的使用者可以欺騙他們想要的任何電子郵件地址,那麼這根本就不是安全的) –

+0

本身沒有得到電子郵件地址,但是您可以從Facebook或Google獲得令牌。這意味着用戶已成功通過該帳戶的身份驗證。 –

+0

如何解析soap xml – 2012-12-14 11:54:13

0

您的第一個解決方案正是我這樣做的方式。由於我所有的休息服務都是無狀態的,因此訪問令牌位於標頭中,並在每個請求中由Spring安全認證過濾器進行分析。我使用spring-security-oauth插件的grails服務器。我們還運行一個網站,允許使用會話cookie進行基於瀏覽器的訪問。