2012-06-08 34 views
3

我們正在開發使用Adobe Flex/Air的iOS應用程序。該應用使用需要通過Facebook登錄進行用戶認證的Web服務。目前,我們使用服務器端身份驗證:在完成Facebook登錄的WebView中顯示登錄URL。這樣,我們得到一個可以在服務器端使用的access_token。iOS Facebook SSO for Air應用程序和Web服務身份驗證

這個效果很好,但如果我們可以在Facebook ios應用程序中使用單點登錄,那真的會好得多。據我所知,這應該在客戶端工作,但我還沒有找到一種方法來驗證服務器端的用戶。

facebook的access_tokens適用於服務器端或客戶端,因此來自客戶端登錄的access_token不適用於服務器端。

預先感謝您的想法,

亨克

+1

任何你不想使用Facebook iOS SDK提供SSO客戶端的原因,然後只是傳遞一個令牌給你的服務器說用戶「X」已經登錄,從而開始一個會話? – Apollo

回答

1

據我所看到的,你讓這個遠複雜得多,它的真正意圖。利用Facebook iOS SDK,以及在您的應用中驗證用戶的所有繁重工作都由Facebook SDK處理。無需獨立提供登錄表並管理應用程序本地存儲和Facebook服務器之間的訪問令牌交換,而無需使用整個 Facebook SDK的便利。

此鏈接顯示如何在您的iOS應用程序中本地實施SSO。這很簡單。 http://developers.facebook.com/docs/mobile/ios/build/#implementsso

然後,我明白你要在外部服務器上保存身份驗證信息或中央用戶數據庫信息。 同步的最佳方式 FB客戶端和您自己的服務器之間的信息是在您收到FB服務器之後,簡單地檢查由FB服務器返回的登錄信息。

下面是一個簡單擊穿:

  1. 登錄使用Facebook的標準SDK用戶(見上面的鏈接)。

  2. -didLogin方法(或任何在Adobe AIR環境中的等價物)中,檢查FB與服務器返回的訪問令牌。不確定您使用的是哪種服務器架構,但可以肯定地說,這將在FB SDK之外進行。另外,將訪問令牌保存在應用程序的用戶默認值中,以便下次用戶不必再次登錄。整個過程應該(並且本質上會)比聽起來更快。

  3. 如果與服務器的檢查成功返回,請通知用戶登錄成功。如果不是,則顯示錯誤視圖,解釋用戶被拒絕/未登錄的原因。

爲什麼這樣呢?原因很簡單。假設您通過Facebook登錄您的應用程序的原因是您可以爲用戶的Facebook信息(即信息源,照片,喜歡,評論等)提出請求。最簡單(也是最好)的方法是通過FB SDK自行完成。 SDK會在幕後處理很多事情,比如隨着時間的推移訪問令牌驗證,令牌生命的延長,令牌的有效性等等。這樣,當發生更改時,您幾乎不用擔心同步服務器信息和實時客戶端信息。只需通過FB iOS SDK進行身份驗證,然後執行其他自己的處理。

評論下面如果有什麼我應該澄清,或者即使我完全錯過了你的問題的重點 - 我傾向於捲起來,並可能偏離重點。 :)

乾杯! The Kraken

相關問題