2013-07-16 52 views
4

我和我的團隊正在開發面向Android的原生移動社交網絡,允許用戶使用Facebook登錄。我設法實現了面向Android的Facebook SDK,但即時通訊正在努力弄清楚如何正確/安全地認證使用Facebook登錄的用戶以及僅從Facebook接收到的憑證。目前這裏是我的系統:在我自己的REST API上驗證從facebook接收的憑證

第1步。從Android客戶端用戶按Facebook登錄並授予我的應用程序的權限。

第2步:一旦用戶授予權限,我們實向我們發送包含該用戶FB用戶名,電子郵件和令牌的響應(以及其他的信息,如果這是第一次在使用Facebook的用戶已經登錄)

第3步:信息發送到我們的API認證

而這正是我是一個有點不清楚....我如何可以驗證我的服務器上facebook的憑據?

截至目前我只是檢查我用的fb_uid和fb_email接到現有的用戶數據庫,但任何人都可以得到任何人的fb_uid,它不是更難找到他們用來註冊Facebook的電子郵件,這意味着有人假設可以輕易地用僞造的http請求侵入另一個用戶帳戶。

回答

2

access_token如果有效,將允許您訪問您的應用請求訪問權限的某些用戶Facebook數據。驗證您收到的憑據是否正確的一種方法是使用該access_token來查詢Facebook。

例如,this page suggests how to open up the access_token properties使用GET電話:

GET graph.facebook.com/debug_token? 
input_token={token-to-inspect} 
&access_token={app-token-or-admin-token} 

然後返回:

{ 
    "data": { 
     "app_id": 138483919580948, 
     "application": "Social Cafe", 
     "expires_at": 1352419328, 
     "is_valid": true, 
     "issued_at": 1347235328, 
     "metadata": { 
      "sso": "iphone-safari" 
     }, 
     "scopes": [ 
      "email", 
      "publish_actions" 
     ], 
     "user_id": 1207059 
    } 
} 
+0

你是老闆蘋果醬我的朋友。謝謝你,先生! – ChuckKelly

+0

@彼得 - 你有沒有在生產中使用過這種方法?在性能方面如何?我想這對於每個API請求都會花費很高的代價。 – jramoyo

+1

@ jramoyo:我上面描述的只是在你錯誤時嘗試使用你沒有的權限。所以,是的,我已經在「生產」中使用過它,但只用於錯誤處理,如果訪問令牌沒有做我們想做的事情。所有(任何?)API請求肯定不需要(儘管訪問令牌是用於非公開信息的)。 –