2013-10-30 69 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