如何续订过期的Facebook访问令牌?

时间:2011-07-15 16:47:06

标签: facebook oauth

我正在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我们需要做的事情)

  4. 我理解使用access_token,我可以调用API等。但是,当它到期时会发生什么?我可以得到一个新的,但到了这一点,以后会有很多HTTP请求,我不再拥有code我以前得到它。我是否必须在code旁边存储access_token?或者,我是否必须告诉用户再次登录,以便获得新的code以获得新的access_token

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

2 个答案:

答案 0 :(得分:25)

access_token到期时,用户将被Facebook视为“已退出”。您的应用将与第一次完成相同的过程,但用户可能不会。

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

如果用户尚未撤销对您应用的访问权限,但未登录Facebook,则会在应用授权步骤中向他们显示Facebook登录信息。他们不会被要求再次授予您的应用程序权限,因为Facebook知道您的应用程序ID已被该用户授权。

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

基本上,您应该将access_token视为易失性,而不是将其存储起来,而是使用您在用户登录过程中收到的access_token,这种情况一直发生在幕后,并且仅在用户退出Facebook或撤销对您的应用程序的访问权限时涉及用户。

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

答案 1 :(得分:5)

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

  

令牌过期后,您需要重新执行上述步骤   生成新代码和access_token,但如果用户已经   授权您的应用程序,不会再次提示他们这样做。

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