问题标签 [facebook-access-token]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
970 浏览

facebook-graph-api - Facebook 客户端身份验证和offline_access 弃用

在你开始对我大喊大叫之前,我知道很多用户已经要求过这样的事情,但我阅读了所有这些,但找不到与我的具体案例相关的任何回复:我最终设法让一些工作正常,但这不是我想的那样我(和其他开发人员)正在寻找。我想与大家分享我对此的经验,所以我将尝试描述我的场景以及我遵循的步骤来研究如何解决这个问题,所以请放纵我这篇长篇文章:我确定它也将帮助一些与我处于相同情况的开发人员清除他们的想法,就像我希望它会给其他人提供正确的信息来帮助我(和其他人)一样。

我编写了一个使用 Facebook API 的原生 Android 应用程序。我使用 Facebook SDK,因为我不想依赖安装在设备上的官方应用程序(事实上,我的应用程序在一定程度上是该应用程序的替代品,所以这样做很愚蠢无论如何都需要首先安装它),但我宁愿直接通过 HTTP 发出 Graph API 调用并自己处理响应。所以如果这是你想给我的答案,请不要因为我不会走那条路。

因此,我使用客户端身份验证来授权我的应用程序,在 WebView 中显示 URL 并在最后获取 access_token。我在其他权限中请求了offline_access。

由于offline_access 将在5 月份被弃用,我开始研究如何获得长期存在的令牌,因此阅读了我能找到的几乎所有与此相关的内容,当然包括官方指南。长话短说,没有什么对我有用,而且我仍然坚持使用非常短暂的 access_tokens,我无能为力。

这就是我开始做的事情:

  1. 在设置中弃用了我的应用程序的offline_access(不是应用程序,因为它现在被许多用户使用,但另一个基本相同,我仅用于测试目的,所以这是同一件事)。
  2. 使用客户端身份验证授权用户:https ://www.facebook.com/dialog/oauth?client_id=MY_APP_ID&redirect_uri=http://my.domain.com/yeah.htmlscope=publish_stream,read_stream,user_photos,friends_photos,offline_access&response_type =令牌&显示=wap

我得到了我的 access_token,但我立即注意到它根本不存在,恰恰相反:expires_in 设置为 6800 秒(不到两个小时)。所以我所做的第一个假设(默认情况下 access_tokens 会更长寿)已经是错误的。

我当时研究了如何延长这个 access_token 的生命周期,并尝试了几乎所有的替代方案。不用说,每次尝试都失败了。这就是我尝试过的,确切地说:

  1. 首先,我当然尝试了“官方”的方法,即通过新端点扩展令牌。现在跳过关于为这样的操作请求客户端密码是多么愚蠢的咆哮(正如许多人已经指出的那样,这样的秘密需要嵌入到 Android 应用程序中,就我们开发人员而言,这是一场安全噩梦。担心,并且代表用户移动这个位服务器端以延长令牌寿命对于他们所关心的事情来说是一场噩梦,因为他们需要相信我会弄乱他们的 access_token),我尝试发出 GET 请求该地址使用正确的参数:https ://graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=APP_SECRET&grant_type=fb_exchange_token&fb_exchange_token=EXISTING_ACCESS_TOKEN...请求显然是成功的,但它并没有延长任何东西的生命周期。该请求刚刚返回与以前相同的 access_token,并带有一个 expires_in 参数,该参数仅反映了流逝的时间(与以前相同,减去自我授权以来经过的秒数)。基本上,该方法只告诉我已经可用的 access_token 可以存活多少,而无需刷新或更改任何内容,因此,尽管它引发了明显的安全问题,但它也毫无用处。
  2. 然后我尝试了其他人的建议,即使用旧的 REST API 来完成这项工作,向以下地址发出 GET 请求:https ://api.facebook.com/method/auth.extendSSOAccessToken?access_token=EXISTING_ACCESS_TOKEN这显然也因臭名昭著的“未使用单点登录获得访问令牌”错误而失败。

在那些失败的尝试之后,我开始思考可能导致所有这些失败的原因。正如我所料,我的应用程序在 Android 设备上运行,但直接向 API 发出 HTTP 请求,我想这可能是问题的根源。

  1. 在我的开发者应用页面的高级部分,我的应用被配置为“Web”而不是“Native/Desktop”。也就是说,将其更改为“Native/Desktop”只会在第一次注销时(大约 24 小时而不是 1-2 小时)给我一个寿命更长的 access_token,而已经描述的延长其寿命的尝试和以前一样失败了。
  2. 官方指南有一个有趣且令人毛骨悚然的段落:“桌面应用程序将无法延长现有 access_token 的寿命,并且一旦令牌过期,用户必须登录到 facebook”。虽然这似乎被许多人忽视了,但我开始认为这可能是我的问题的原因,所以我尝试了另一种方法,即我尝试了服务器端身份验证而不是客户端身份验证:再次,这个需要 client_secret 所以对于 Android 应用程序来说是一个愚蠢的解决方案,但我还是想尝试一下。所以,我首先得到了代码,然后是 access_token(如http://developers.facebook.com/docs/authentication/server-side/中所述)。这导致 access_token 的寿命更长(5183882 秒,即大约 59 天),但话又说回来,两种已知的扩展它的方法(即使在这种情况下并不真正需要)导致同样的事情:前者不刷新任何东西,后者抱怨它不是通过 SSO 获得的。

所以,长话短说(我知道,为时已晚),弃用offline_access 的最后期限是如此之近,以至于你可以感觉到它在你的脖子上呼吸,似乎没有任何效果你对这一切有什么经验,如果你和我在同一条船上并且你设法让它工作,你是怎么做到的?

谢谢你的耐心。

0 投票
1 回答
319 浏览

facebook - Facebook auth 访问链接停止工作,我只收到一般错误消息

我有一个 facebook 页面选项卡,我尝试通过链接获取访问令牌

https://www.facebook.com/dialog/oauth?client_id=[APP_ID]&redirect_uri=[REDIRECT_URI]

我一直在工作,但现在突然间我收到一条通用错误消息:“发生错误。请稍后再试。”

我已经检查过,APP_ID 是正确的,据我所知,应用程序设置没问题。这有什么新的变化吗?

0 投票
0 回答
1787 浏览

java - Facebook 刷新访问令牌:服务器返回 HTTP 响应代码:400

我正在尝试通过调用此处详述的新 facebook 端点来自动刷新用户 OAuth2.0 access_token

我正在构建一个 Java (SEAM) Web 应用程序,facebook 身份验证是使用服务器端流程完成的

我不断收到响应代码 400,任何人都可以看到下面的代码有什么问题,因为我不确定我哪里出错了......

谢谢

0 投票
1 回答
1839 浏览

java - 在服务器端流上请求长寿命 access_token

我有一个 Java 网络应用程序,可以将项目发布到我们的用户 facebook 墙上,当用户最初注册时,我们会得到一个 60 天的 access_token,它会保存到我们的数据库中,现在离线访问已被删除,我使用我们的“使用 facebook 登录”按钮在用户登录我们的网站时更新令牌,这一切都很好,因为他们通常会相隔 60 天以上访问。

我已经实现了上述内容并且效果很好......但后来我发现登录操作生成的访问令牌会在 1 小时后过期......显然不好,我们不能在他们不在的时候发布到他们的墙上.

下面的代码演示了我们如何通过 signed_request 方法(在 Java SEAM 应用程序中)获取令牌,这工作正常,但令牌是短暂的

谁能建议如何确保代币是 60 天的类型

谢谢

0 投票
1 回答
589 浏览

facebook-graph-api - Facebook API 访问令牌 - 当我知道 uid 和密码时

我的情况很简单:我知道(用户)UID 和密码,我想创建 API 请求,例如https://graph.facebook.com/220439?access_token=....

想要的是将用户重定向到 Facebook 页面并提示他给我权限 - 因为我知道凭据。有没有办法直接获取access_token?或者至少只发出一次第一个 OAuth 请求,接收永久请求令牌,然后在进行 API 调用时只将其切换为常规访问令牌?

顺便说一句,我使用 PHP SDK。

0 投票
1 回答
1561 浏览

php - 使用页面访问令牌和 fb_exchange_token 在页面上发布

我正在尝试在用户拥有的页面上为发布者设置一个应用程序。

1)我请求具有 manage_pages,publish_stream 范围的 js 的许可

2) $fb->api('/'.$fb->getUser().'/accounts', 'GET', array('access_token' => $token)

3)我通过线程中的 MarcusJoe 方法获取令牌 How to extend access token validation since offline_access deprecation

4)将页面access_token存储在数据库中

5) 在页面上发布 $fb->api('/'.$pageId.'/feed','POST',array_merge(array('access_token'=>$row->token),$params));

因此,当我登录时,如果我确实注销了大约两个小时就可以很好地摆脱所有cookie,它会起作用而不是停止处理消息

使访问令牌无效时出错:会话与当前存储的会话不匹配。这可能是因为用户在创建会话后更改了密码,或者 Facebook 出于安全原因更改了会话。

所以我很想知道我是否做错了什么:(

你能帮我吗 ?

再见

0 投票
1 回答
257 浏览

access-token - 访问令牌?

我正在开发一个托管在 Heroku 上的 PHP 应用程序,我最大的问题是没有为用户获取访问令牌以使我的应用程序完全工作。该应用程序非常适合我(因为我是管理员),但与该应用程序无关的其他人无法让该应用程序显示任何内容。我还尝试使用测试用户来查看它是否会起作用,但仍然没有运气。我很确定这与访问令牌和应用程序无权执行其操作有关。我该如何以及在哪里解决这个问题?

0 投票
1 回答
1161 浏览

security - 访问令牌到期/续订

我有一个个人网站,我想在上面显示我最新的 Facebook 评论。一切正常,但我不确定访问令牌过期是如何工作的。我有两个月的访问令牌,这是否意味着每两个月我必须获得一个新的访问令牌并替换我的代码中的那个。如果是这样,那真的一点都不方便……尤其是因为这一切都是为了授权 MYSELF 获得我自己的评论。

有没有办法自动更新访问令牌或获得一个不会过期的令牌或任何其他方式来解决这两个月到期的事情?

0 投票
1 回答
631 浏览

facebook-graph-api - Facebook Graph Batch,只需要顶级 access_token

我正在使用 Facebook Graph Batch API 向注册人的 FB 墙发送一条消息/不同消息。我正在为每个用户定义一个 access_token ,以及必须的顶级 access_token (根据doc用作后备)。对于后者,我只使用批处理中列出的用户的 access_token。

问题是唯一收到消息的用户是我用作顶级/后备access_token的access_token的用户。其他用户收到“(#210) 用户不可见”错误消息。我在我的应用程序角色中使用 3 个测试用户设置。

知道这里出了什么问题吗?

这是我的代码(python),用于向所有注册人生成一条消息:

为“params”产生以下值:

因此,唯一接收消息的用户是此处定义的用户: "access_token" : self.registrants[0]['access_token'] 当我调整索引时,我可以确定接收消息的用户;)

0 投票
1 回答
1014 浏览

facebook - Facebook:POST userid/apprequest 抛出异常(虽然发送了邀请)

我正在尝试向朋友发送应用请求,我的代码总是抛出异常,但我看到我的朋友收到了应用请求。我很困惑。有人可以让我知道如何使用 rest-fb api 处理请求对话框吗?

我的代码