【问题标题】:How do you renew an expired Facebook access token?如何更新过期的 Facebook 访问令牌?
【发布时间】:2011-10-06 07:52:55
【问题描述】:

我在this reference 工作,并尝试实施 OAuth 协议以允许用户通过 Facebook 登录我的网站。但是,Facebook 的文档非常糟糕,并且在一些关键部分不清楚。

上面说授权需要三个步骤:

  1. 用户身份验证(将用户重定向到https://facebook.com/dialog/oauth?client_id=...&redirect_uri=...,并期望redirect_uri 页面被code 回调)。效果很好!

  2. 应用授权(由 Facebook 等处理)。效果很好!

  3. 应用认证(在回调页面,获取code并调用https://graph.facebook.com/oauth/access_token?client_id=...&redirect_uri=...&client_secret=...&code=...。响应的正文将包含access_token我们需要做的事情)

    李>

我知道使用access_token,我可以调用API 等。但是,当它到期时会发生什么?我可以得到一个新的,但到那时它将有很多 HTTP 请求,而且我不再拥有我一开始得到它的code。我必须将codeaccess_token 一起存储吗?或者,我是否必须告诉用户重新登录,以便我获得一个新的code 来获得一个新的access_token

或者,我在这里遗漏了一个关键部分吗?我不需要offline_access 令牌,因为我只会轮询数据以响应用户操作。

【问题讨论】:

    标签: facebook oauth


    【解决方案1】:

    来自您问题中链接的 Facebook 文档:

    令牌过期后,您需要重新运行上述步骤以 生成一个新的代码和 access_token,尽管如果用户已经 授权您的应用,他们将不会被提示再次这样做。

    access_token 到期后,您需要通过相同的步骤返回一个新的。用户必须再次登录,您必须获得一个新的code,然后又是一个新的access_token

    【讨论】:

      【解决方案2】:

      access_token 过期时,用户将被 Facebook 视为“已注销”。您的应用将经历与第一次相同的过程,但用户可能不会。

      如果用户尚未撤销对您应用的访问权限,并且该用户当时已登录 Facebook,则应用授权流程将自行处理,用户无需执行任何操作,您将收到一个新的access_token.

      如果用户没有撤​​销对您应用的访问权限,但没有登录 Facebook,他们将在应用授权步骤看到 Facebook 登录。他们不会被要求再次授予您的应用权限,因为 Facebook 知道您的应用 ID 已由该用户授权。

      最后,如果用户撤销了访问权限,那么他们将看到原始的应用授权请求,您将按照原始流程进行操作。

      本质上,您应该将access_token 视为易失性,而不是存储它,而是使用您收到的access_token 作为用户登录过程的一部分,这一直在幕后发生,并且只涉及当用户退出 Facebook 或撤销对您的应用程序的访问权限时。

      这与 Twitter 的 OAuth 不同,您可以使用它来存储和重复使用它。

      【讨论】:

      • 所以,等等,你是说我应该在每次页面加载时重新进行身份验证吗?这不会使我的服务器的请求数量增加一倍吗?
      • 只需要在access_token过期时重新认证即可。您获得 access_token 的响应还包括一个 expires 参数,它是 access_token 过期之前的秒数。您知道令牌何时发布,因此您所要做的就是根据秒数检查它是否过期。如果有,就买一个新的。如果还没有,请继续使用它。
      • 哦,好的。幸运的是,这是我之前得出的结论。当令牌过期时,我只是在 OAuth 过程的开头插入一个重定向。
      • 如果 60 天令牌已过期并且应用程序尚未被撤销,我是否需要在他们下次访问应用程序时使用签名请求中的当前令牌来扩展和更新旧存储的令牌?我存储的原因是因为我每天都在为需要该令牌的用户生成内容进行抓取。
      • 如果用户更改密码也会过期
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-12
      • 1970-01-01
      • 1970-01-01
      • 2013-04-04
      • 1970-01-01
      • 1970-01-01
      • 2012-12-06
      相关资源
      最近更新 更多