【问题标题】:Access token immediately invalidated访问令牌立即失效
【发布时间】:2012-01-21 00:34:05
【问题描述】:

对于少数用户(考虑到我收到的相关邮件的数量,可能不是那么少),与 OAUTH 授权关联的访问令牌似乎立即失效。引导用户完成通常的授权过程,他接受权限,他被重定向到包含访问令牌的正确页面,但是一旦我的应用程序尝试使用访问令牌获取用户 ID,就会收到错误而是:

{"error":{"message":"Error validating access token: Session has expired at unix time 0. The current unix time is 1323939801.","type":"OAuthException"}}

offline_access 是权限的一部分。此外,原因不可能是用户删除授权或更改密码,因为这是在接受授权后立即发生的。在我的应用程序流程中,我已经尝试重试几次,从收到的日志中我可以看到错误始终相同:再次引导用户完成授权过程没有用,因为用户再次被重定向到页面片段中的 access_token。显然,用户解决此问题的唯一方法是将应用程序从授权应用程序列表中删除并重新执行相同的操作(除非在第 n 次重试时它开始工作,并非所有用户都在事情开始工作时回信)。

这可能是什么原因?

【问题讨论】:

  • 在使用 Facebook iOS SDK 时遇到同样的问题。授权后立即使用 offline_access 获取令牌的错误。一些令牌在几分钟后就可以正常工作了。

标签: authorization access-token facebook-oauth


【解决方案1】:

我似乎遇到了同样的问题,请在此处查看我的问题:The session has been invalidated because the user has changed the password -> 编辑:我认为这不再是同一件事了,我找到了根本原因,请参阅该问题的答案。

这里还有另一个相关问题:How can I remove all potentially cached tokens or session IDs on Android?

还有线索吗..?

【讨论】:

  • 很遗憾,没有线索,而且一直在发生:非常令人沮丧。
  • 我不知道你的代码,也不知道你在哪里得到这个错误信息。但只是为了分享我的经验:当要求离线访问时,似乎不同的 facebook SDK 将会话中的“过期”参数设置为不同的东西。我正在使用 Android 和 iOS SDK,对于 iOS,“过期”的日期为 4001-01-01,而在 Android 中,“过期”将设置为 0。这至少愚弄了我,让我不得不更正逻辑不要让我的应用认为会话已过期。也许它可以帮助某人.. :)
  • 我不使用任何 Facebook SDK:我使用 Android 中的 HttpClient 类发出直接 Graph 请求,这意味着我发送简单的 GET 请求并自己解析响应。为了授权,我只是将用户重定向到 WebView 中 OAUTH 对话框的 WAP 版本:我不知道这是否是您所说的将过期值设置为 0 的原因。
  • 实际上,我相信在请求 'offline_access' 时无论如何都不会涉及 'expires' 参数,因为在这种情况下令牌永远不会过期。
【解决方案2】:

离线访问已被弃用,我不会再要求它了。相反,至少在 iOS SDK 中,有一种更新方法。

【讨论】:

  • 我的问题可以追溯到 6 个月前,这不像我还在问...... ;)
  • 我知道更新方法,但在我的情况下它不能按预期工作(令牌的生命周期没有延长),而且对于许多其他人来说似乎也是一样的。我在 StackOverflow 上打开了另一个项目,我正在关注其他开发人员在 Facebook 上发布的所有相关错误。
  • 是的,我只是说 - 我刚刚实现了 iOS 和 Android,还没有遇到过期问题。而且,不要求offline_access。
猜你喜欢
  • 2016-11-19
  • 1970-01-01
  • 2019-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
  • 2019-09-29
  • 2016-05-20
相关资源
最近更新 更多