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

Mik*_*ron 14 facebook oauth

我正在使用此参考,并尝试实施OAuth协议,以允许用户通过Facebook登录我的网站.然而,Facebook的文档非常糟糕,并且在一些关键部分还不清楚.

它说授权需要三个步骤:

  1. 用户身份验证(将用户重定向到https://facebook.com/dialog/oauth?client_id=...&redirect_uri=...,并期望redirect_uri使用a回调页面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我以前得到它的东西.我是否必须存放在code旁边access_token?或者,我是否必须告诉用户再次登录,以便我code获得一个新的access_token

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

Nat*_*yer 25

access_token期满时,用户将被视为受这里作为"注销".您的应用将与第一次完成相同的过程,但用户可能不会.

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

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

最后,如果用户已撤销访问权限,则会向他们显示原始的App Authorization请求,您将按照原始流程进行操作.

从本质上讲,你应该把它access_token看作是易变的,而不是麻烦存储它,而是使用access_token你收到的用户登录过程的一部分,这一过程一直在幕后发生,并且只有用户在他们退出Facebook时才会涉及到撤消对您的申请的访问权限.

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


Owe*_*wen 5

从您问题中链接的Facebook文档:

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

access_token到期时,您将需要通过相同的步骤回去换新的.用户必须再次登录,你必须得到一个新的code,反过来,一个新的access_token.