2011-01-07 39 views
359

目標: 允許用戶使用Facebook進行身份驗證,進入需要訪問我正在運行的受保護Web服務的iOS應用程序。在iOS應用程序中進行Facebook身份驗證的設計也可以訪問安全的Web服務

假設: 目前已具備爲那些選擇不使用Facebook的標誌使用本地認證(登記)制度

詳情:

  • 假設我們希望爲用戶提供選項,以便在未爲我們的系統創建單獨帳戶/憑證的情況下使用Facebook登錄。
  • 因爲我們支持我們自己的本地身份驗證機制(用戶名和密碼),所以我們擁有自己的用戶ID並頒發用於初始憑證驗證後的後續交互的身份驗證令牌。

我很驚訝Facebook在開發者文檔中沒有這方面的最佳實踐。所有現有的文檔要麼假設您正在將FB auth構建到網站中,要麼假設沒有需要驗證的服務的獨立移動應用程序。

這是我的初步想法,這將如何設計,但要驗證它是否正確。

  1. 客戶端彈出的Facebook的iOS登錄
  2. UI用戶登錄與Facebook的證書和獲得訪問令牌
  3. iOS應用程序通過訪問令牌我們的服務器FB圖形API使用訪問
  4. 我們的服務器會談令牌(a)驗證令牌和(b)獲取該訪問令牌的FB用戶ID。

    例如我們的服務器會調用https://graph.facebook.com/me/?access_token=XYZ,這將返回JSON對象中的配置文件信息

  5. 假設它是有效的,我們的服務器從JSON對象中提取用戶ID並檢查用戶是否已經有一個帳戶。如果是這樣,我們發佈自己的身份驗證票證給客戶端用於該會話。如果用戶沒有帳戶,我們將使用Facebook用戶ID創建一個新帳戶,分配我們自己的唯一用戶ID並頒發我們的身份驗證票證。

  6. 然後,客戶端將身份驗證信息傳遞給需要身份驗證的後續交互。

這似乎是對我來說正確的方法,但不知道如果我失去了瘋狂的基本和錯誤的(複雜的)路徑。

+0

這是如何解決?我正在考慮傳遞訪問令牌,並在服務器上啓動用戶。似乎學術,但我問。 – 2011-04-22 17:43:41

+0

這是我的實現使用rails和設計: http://stackoverflow.com/questions/7232490/how-to-use-http-authentication-in-devise-with-an-optional-omniauth-token-as- – Matt 2011-12-20 06:46:14

+0

爲什麼不傳遞整個auth_hash,而不必兩次調用FB API(一個來自iOS設備,一個來自服務器)? – bsiddiqui 2013-03-11 18:10:02

回答

66

我剛剛處理了這個自己,這裏有一個咬了我的一部分:

在你的第5步......這有可能使用戶的賬號與你完全從他們的Facebook ID單獨註冊,右?然後,他們再次登錄Facebook ......並且您剛創建了第二個帳戶並丟失了第一個帳戶。

有需要在你的web服務,以記錄的方式,然後登錄到Facebook,並捕獲了Facebook ID和本地帳戶之間的關聯。

除此之外,你的計劃聽起來很可靠。

11

的一個問題,我可以用這個策略看,就是有人可以給你一個不同的Facebook應用程序獲得訪問令牌。據我所知,無法驗證訪問令牌是否適用於您的應用程序,因此您只需繼續並使用它。

雖然這聽起來不太有害。通常,人/應用會嘗試保護訪問令牌,而不是共享它們。這

一個可能的攻擊將是,有人來創建自己的網站或移動應用程序,獲得訪問令牌爲他們的用戶,並試圖對其進行身份驗證,使用API​​。如果成功(用戶在您的網站上有一個Facebook帳戶),惡意網站將能夠使用您的API模擬用戶。

這是一個遠射,但我認爲它可以工作。

編輯:看起來好像有一種方法來驗證訪問令牌。請參閱@Daaniel在Get application id from user access token (or verify the source application for a token)問題上的答案。

27

使用HTTPS的身份驗證令牌傳遞到你的服務器,如Facebook的規定

訪問令牌的共享

我們的數據政策明確禁止訪問令牌 的任何共享與任何您的應用程序其他應用程序然而,我們允許開發者本地實現和服務器 實現相同的應用程序(即,使用相同的應用程序ID)之間 份額令牌只要 傳輸使用HTTPS進行。

3

您的解決方案完全適用。

也許替代:爲什麼不乾脆從最初的社會化服務的要求在客戶端上的電子郵件,然後發送到你的Web服務? Web服務可以存儲電子郵件,也可以是社交供應商。我知道您的Web服務將無法驗證電子郵件的來源,但您的Web服務與客戶之間沒有高度信任關係?如果有的話,似乎你可以依靠來自正確的地方的電子郵件。有人請讓我知道我錯過了什麼明顯的事情,使基於電子郵件的方法愚蠢......

相關問題