Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 验证Facebook令牌时遇到问题_Cocoa_Facebook Graph Api_Facebook Login - Fatal编程技术网

Cocoa 验证Facebook令牌时遇到问题

Cocoa 验证Facebook令牌时遇到问题,cocoa,facebook-graph-api,facebook-login,Cocoa,Facebook Graph Api,Facebook Login,我正在为OSX构建一个小型Facebook登录库。这不是因为没有SDK,而是因为我想要Cocoa自带的东西来封装登录过程。我已成功从Facebook登录URL请求访问令牌。我使用此字符串格式执行登录: https://www.facebook.com/dialog/oauth?client_id=%@&redirect_uri=%@&response_type=token 对于重定向\u uri字段,我通过https://www.facebook.com/connect/log

我正在为OSX构建一个小型Facebook登录库。这不是因为没有SDK,而是因为我想要Cocoa自带的东西来封装登录过程。我已成功从Facebook登录URL请求访问令牌。我使用此字符串格式执行登录:

https://www.facebook.com/dialog/oauth?client_id=%@&redirect_uri=%@&response_type=token
对于
重定向\u uri
字段,我通过
https://www.facebook.com/connect/login_success.html
根据Facebook文档。我获取响应并解析URL。我要么得到一个令牌,要么失败。代币好像回来了。麻烦在下一步

收到令牌后,我立即尝试验证它。我使用“调试”端点,如下所示:

https://graph.facebook.com/debug_token?input_token=%@&access_token=%@
我将我的新令牌作为
input\u令牌
传递,这就是它的粘性所在。我已尝试传递我的客户端令牌,但这会导致以下错误:

无法完成该操作。(OAuth访问令牌无效。错误190。)`

如果我传递我的
应用程序ID |应用程序机密
,我会得到一个不同的错误:

无法完成该操作。((#100)您必须提供应用程序访问令牌或作为应用程序错误100的所有者或开发者的用户访问令牌。)

我不知道这里发生了什么,也不知道该怎么办。有人能给我指出正确的方向吗?

如果你想以应用程序而不是用户的身份做事,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"
}

这不是有点安全隐患吗?某人可以从其他应用程序获得用户访问令牌,然后他可以将其发送到我们的服务器并作为其他用户登录。还是我搞错了?Facebook客户端令牌的作用域是应用程序。他们不会在另一个应用程序中工作。谢谢你澄清这一点。换句话说,如果我想检查任何令牌的范围,我必须发出请求并检查它是否被拒绝?(我试图抓住这样一个案例:用户减少了我选择的默认范围,并防止我的应用程序崩溃)@AugustosaméBarrientos,这是错误的。用户访问令牌的作用域不限于应用程序。例如,使用/me路由只需要用户访问令牌,而不需要任何与应用程序相关的信息。@sermonionx您混淆了概念。当你让你的用户注册使用你的应用程序时,你作为应用程序开发者,将从Facebook获得一个客户端用户令牌。它唯一地标识用户以及用户在注册应用程序时授予的权限。但它的范围只是你的应用程序。它不能用在其他地方。它将允许您返回/me路由上的数据,因为它的作用域是用户,但对于应用程序相关的权限,它的作用域仅限于您的应用程序。您好,您解决问题了吗?当我传递我的
app ID | app secret
时,我也遇到了#100 OAuth错误。真正的答案如下: