2013-10-30 151 views
3

我正在爲OS X構建一個小型Facebook登錄庫。這不是因爲沒有SDK,而是因爲我想要一些可以封裝登錄過程的Cocoa原生的東西。我已成功從Facebook登錄URL請求訪問令牌。我用這個字符串格式來進行登錄:無法驗證Facebook令牌

https://www.facebook.com/dialog/oauth?client_id=%@&redirect_uri=%@&response_type=token 

對於redirect_uri場我通過https://www.facebook.com/connect/login_success.html按照Facebook的文檔。我採取任何迴應,並解析URL。我會得到一個令牌或失敗。令牌似乎恢復正常。麻煩在下一步。

在收到我的令牌後立即嘗試驗證它。我用的是「調試」端點,就像這樣:

https://graph.facebook.com/debug_token?input_token=%@&access_token=%@ 

我通過我的新的標識作爲input_token,這是它得到粘。我試着通過我的客戶端令牌,但導致以下錯誤:

The operation couldn’t be completed. (Invalid OAuth access token. error 190.)`

如果我通過我的app ID | app secret,我得到一個不同的錯誤:

The operation couldn’t be completed. ((#100) You must provide an app access token or a user access token that is an owner or developer of the app error 100.)

我不知道這裏發生了什麼,或做什麼。任何人都可以將我指向正確的方向嗎?

回答

7

debug API是爲如果你想做的事情作爲該應用程序,而不是用戶。一旦用戶登錄,您需要的只是他們的訪問令牌來獲取有關它們的信息,閱讀他們的信息,發佈內容(當然假設您有權訪問令牌來執行您正在嘗試執行的操作)。所以你的情況,現在你有一個訪問令牌,繼續前進,試圖獲得有關使用

https://graph.facebook.com/me?access_token=%@ 

的用戶信息,你會回來的東西是這樣的:

{ 
    "id": "542440888", 
    "name": "Max Rabin", 
    "first_name": "Max", 
    "last_name": "Rabin", 
    "link": "https://www.facebook.com/MY_USER_NAME", 
    "username": "MY_USER_NAME", 
    "birthday": "11/22/YEAR", 
    "hometown": { 
     "id": "110970792260960", 
     "name": "Los Angeles, California" 
    }, 
    "location": { 
     "id": "110970792260960", 
     "name": "Los Angeles, California" 
    }, 
    "bio": "There are 10 kinds of people in this world.\r\n01: Those who know trinary\r\n02: Those who don't\r\n10: Those who confuse it with binary", 
    "gender": "male", 
    "email": "MY_EMAIL", 
    "timezone": 2, 
    "locale": "en_US", 
    "languages": [ 
     { 
     "id": "106059522759137", 
     "name": "English" 
     } 
    ], 
    "verified": true, 
    "updated_time": "2013-10-21T10:02:49+0000" 
} 
+3

是不是有點安全隱患?有人可以從其他應用程序獲得用戶訪問令牌,然後他可以將其發送到我們的服務器並以其他用戶身份登錄。或者我錯了? – Kamoris

+0

Facebook客戶端令牌被限制在應用程序中。他們不會在另一個應用程序中工作。 – Augusto