2012-08-22 106 views
0

我公司開發的工作原理如下的系統:FB認證

有一個iPhone /移動應用程序,並且提供其他服務的PHP服務器。

在移動應用中

,用戶可以通過兩種方式註冊/登錄:

  1. 用戶名/密碼夫婦
  2. Facebook帳戶

而點1是很清楚,我我在第2點的難點:

從我理解,序列應該是類似於以下內容:

1 - 應用程序發送給fb用戶數據,fb以某種方式我不關心用戶身份驗證,並用「ok,it's you」回答。 2,應用程序現在必須向php服務器請求一些用戶數據。

在用戶在應用程序中使用fb登錄之後,如何驗證服務器和應用程序之間的通信?

我不能只問「給我發送用戶fbid的數據」,因爲有一個簡單的請求可以被任何人檢索。

+0

使用fb圖形API你可以得到FB用戶ID,名稱,頭像和其他信息..你可以使用數據庫來存儲這些並與服務器通信? – iMeMyself

+0

是的,但我不瞭解通信部分。 我的意思是:讓我們說一切都存儲在分貝。 當應用程序請求數據時,服務器如何驗證該請求被允許的事實? 我應該向服務器提交標識我的東西,但是服務器可以識別的東西,如果我只提交fbid,任何php腳本的任何人都可以嘗試隨機fbid,直到它獲得一個 – Stormsson

+0

,當應用程序對用戶進行身份驗證時在fb中,我必須將用戶數據保存在服務器數據庫中。所以應該有從應用程序到服務器的數據傳輸。即使在這種情況下,我也有同樣的問題 – Stormsson

回答

4

這就是爲什麼你使用「密鑰」(Facebook設置的一部分)。

當用戶通過您的應用程序登錄時,他們會批准與您的應用程序共享信息並獲得令牌 - 該令牌是會話ID。該會話ID只能由該用戶從該手機與您的應用一起使用,除非您擁有「密鑰」。

手機然後將該會話ID傳遞給服務器。

然後,服務器將令牌和密鑰一起傳遞給服務器,並且Facebook向服務器返回與手機用戶相同的信息。這就是它的身份驗證。

沒有密鑰的任何其他人(電話用戶除外),並且令牌無用。

+0

這是否意味着所有的用戶共享相同的私鑰是應用程序的祕密? 並且所有的交易都是用私鑰 - 公鑰系統進行的? – Stormsson

+0

。用戶有自己的「私鑰」 - 他們的密碼。您分享的項目是您的AppID。他們使用他們的密碼來證明他們是誰,並將您的Facebook AppID傳遞給Facebook,告訴Facebook「任何擁有該應用程序密鑰的人和我的令牌都可以訪問我的數據的某些部分」。您使用您的應用程序的密鑰來確認它是您的應用程序調用,並獲得該數據。這與公鑰/私鑰加密算法非常不同。 – Robbie

+0

對不起,如果我堅持,但我必須完全理解,並且我錯過了一些東西: 當用戶在iphone/android應用程序中進行fb登錄時,它與fb進行通信並在應用程序中進行登錄。 現在在應用程序駐留一個fb登錄的用戶。 在這一點上,我需要發送到服務器的用戶數據有效載荷來創建數據庫中的各種東西。 我不明白我應該發送到服務器... 我敢肯定的是: 1)顯然不是乾淨的有效載荷。 2)必須有fb用戶標識才能創建一個唯一的記錄 – Stormsson