2011-01-27 82 views
7

我開發了一個簡單的API來允許我的Android/iPhone應用程序和我的服務器之間進行通信。在我的應用程序,用戶需要驗證自己和他們使用的登錄/密碼憑證與以下API調用做到這一點:Facebook連接以在個人API上進行身份驗證

http://api.myapp.com/login?user=xxx&pass=pass 

應用程序收到回報:

{ "api_token": "xxxx-xxxx-xxxx-xxxx" } 

所以基本上我對交換我的憑據api_token

我想添加Facebook連接支持。我已成功使用Facebook SDK並收到正確的access_token

不過,我需要實現一種機制與api_token

假設用戶已經連接與Facebook(他的網站用戶面板上)他的帳戶交換access_token,這將是進入到交流的最佳實施?

回答

5

這是我最終做到的。它工作一年以上,沒有任何問題。我們的想法是使用下面的API調用來交換令牌:

http://api.myapp.com/login/facebook?access_token=<facebook_access_token> 

服務器端,驗證access_token的有效性用一個簡單的

wget -qO- https://graph.facebook.com/me?access_token=<facebook_access_token> 

哪個送你回一個JSON的所有用戶信息,包括用戶的Facebook ID。假設用戶已將其帳戶連接到Facebook,則可以查找user_id併發回api_token

+0

以下是我關心的場景: 應用程序A爲X用戶獲取fb訪問令牌。 應用程序A在http://api.myapp.com/login/facebook訪問您的登錄網址?access_token = ...' 由於您現在擁有應用程序A已獲取的訪問令牌,因此您現在擁有與用戶相同的所有訪問權限,而用戶沒有授予您許可權限(他們「我只授予應用程序A的許可)。雖然我可以通過多種方式將其視爲辯護,但它似乎仍然有些不妥,並且可能違反了用戶的信任。 你覺得呢? – 2012-09-26 06:45:46