Facebook Oauth 2.0访问令牌是否过期?

时间:2010-04-22 01:55:38

标签: facebook oauth

我正在玩Facebook上的Oauth 2.0授权,并且想知道Facebook传递的访问令牌是否会过期。如果是这样,有没有办法请求长期访问令牌?

13 个答案:

答案 0 :(得分:62)

在挖了一下后,我发现了这一点。这似乎是答案:

更新(11月/ 4月/ 2018)

  • 令牌将在约60天后过期。
  • 当使用您应用的用户向Facebook的服务器发出请求时,该令牌每天刷新一次,最多90天。
  • 所有访问令牌需要在使用您的应用的用户同意后每90天续订一次。

Facebook change announce (10/04/2018)

Facebook updated token expiration page (10/04/2018)

offline_access: 使您的应用程序可以随时代表用户执行授权请求。默认情况下,大多数访问令牌在短时间后过期,以确保应用程序仅在主动使用应用程序时代表用户发出请求。此权限使我们的OAuth端点返回的访问令牌持久存在。

请求的权限值。

http://developers.facebook.com/docs/authentication/permissions

<强>更新

offline_access权限已被删除。

https://developers.facebook.com/docs/roadmap/completed-changes/offline-access-removal/

答案 1 :(得分:29)

尝试这可能会对你有所帮助

https://graph.facebook.com/oauth/authorize?
    client_id=127605460617602&
scope=offline_access,read_stream,user_photos,user_videos,publish_stream&
    redirect_uri=http://www.example.com/

要获得终身访问令牌,您必须使用scope=offline_access

scope=offline_access的含义是: -

  

使您的应用程序能够代表执行授权请求   用户随时。默认情况下,大多数访问令牌在a之后到期   短时间内确保应用程序仅代表请求   当用户正在使用该应用程序时。这个   权限使我们的OAuth端点返回访问令牌   长寿命。

     
    

但根据facebook未来的升级版本,offline_acees功能将从2012年10月3日起永久弃用。     并且用户将获得60天长期访问令牌,并且在访问令牌到期之前Facebook将通知您,或者您可以获得自定义通知功能从Facebook Api获取到期值..

  

答案 2 :(得分:21)

请注意,Facebook现在正在弃用offline_access权限,以支持您可以请求“升级”到期的令牌。我现在正在处理这个,我自己,所以我没有更多的话要说,但这个文档可能有所帮助:

https://developers.facebook.com/docs/offline-access-deprecation/

答案 3 :(得分:17)

我带着与OP相同的问题来到这里,但建议使用offline_access的答案正在为我提出危险信号。

安全方面,离线访问用户的Facebook帐户在性质上有所不同,远比仅使用Facebook进行单点登录强大,并且不应轻易使用(除非您真的需要它)。当用户授予此权限时,“应用程序”可以随时随地检查用户的帐户。我将“应用程序”放在引号中,因为它实际上是任何具有凭据的工具 - 您可以编写一整套与Web服务器无关的工具,这些工具可以访问用户同意分享给那些的任何信息。凭证。

我不会使用此功能来解决短令牌生命周期;这不是它的预期目的。实际上,令牌生存期本身就是一种安全功能。我还在寻找有关正确使用这些令牌的详细信息(我可以坚持下去吗?我应该如何保护它们?Facebook是否将OAuth 2.0“刷新令牌”嵌入主要内容中?如果没有,它在哪里和/或者如何刷新?),但我很确定offline_access不是正确的方法。

答案 4 :(得分:8)

是的,它们确实会过期。有一个'expires'值与'access_token'一起传递,从我可以告诉它约2小时。我一直在寻找,但我没有办法要求更长的到期时间。

答案 5 :(得分:6)

因为我遇到了同样的问题 - 请参阅ben biddington关于此主题的优秀帖子,他用错误的令牌和正确的类型来澄清所有这些问题。

http://benbiddington.wordpress.com/2010/04/23/facebook-graph-api-getting-access-tokens/

答案 6 :(得分:4)

每次用户通过Facebook登录您的网站时,您都可以随时刷新用户的访问令牌。 离线访问无法保证您获得终身访问令牌,只要用户撤销您的应用程序访问权限或用户更改其密码,访问令牌就会更改。

引自facebook http://developers.facebook.com/docs/authentication/

  

注意:如果应用程序未请求offline_access权限,则访问令牌是有时间限制的。当用户退出Facebook时,时间限制的访问令牌也会失效。如果应用程序已从用户获得offline_access权限,则访问令牌没有到期。但是,只要用户更改了他/她的密码,它就会失效。

假设您将用户的facebook uid和访问令牌存储在数据库的users表中,每次用户点击“Login with facebook”按钮,您使用facebook Javascript API检查登录状态,然后检查连接状态从响应中,如果用户已连接到您的站点,则可以更新表中的访问令牌。

答案 7 :(得分:3)

点击这个以交换一个很长的生活/非过期(页面)的短生活访问令牌:

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 

答案 8 :(得分:1)

登录Facebook帐户并编辑您的应用程序设置(帐户 - &gt;应用程序设置 - &gt;使用您帐户的应用程序的其他权限)。取消选中权限(当我不使用应用程序时访问我的数据(offline_access))。然后当您登录应用程序时,face将发出新令牌。

答案 9 :(得分:1)

基本的facebook令牌在一小时后到期。但是你可以使用'exchange'令牌获得一个长期存在的令牌 https://developers.facebook.com/docs/facebook-login/access-tokens

GET /oauth/access_token?  
    grant_type=fb_exchange_token&           
    client_id={app-id}&
    client_secret={app-secret}&
    fb_exchange_token={short-lived-token} 

答案 10 :(得分:1)

这是几年之后的事,但是Facebook Graph API Explorer现在在访问令牌旁边有一个小信息符号,可让您访问访问令牌工具应用程序,并将API令牌延长几个月。在开发过程中可能会有所帮助。

enter image description here

答案 11 :(得分:0)

在与facebook graph api互动时检查以下内容。

1)应用程序连接URL应该是“redirect_uri”的基础 连接网址: - www.x-minds.org/fb/connect/ redirect_uri - www.x-minds.org/fb/connect/redirect 2)你的“redirect_uri”在这两种情况下应该是相同的(当你请求验证码和请求access_token时) redirect_uri - www.x-minds.org/fb/connect/redirect 3)当您请求access_token时,您应该对参数进行编码 4)当您请求access_token时,不应传递参数(type = client_cred)。授权服务器将发出没有会话部分的令牌。我们不能在图api中将此标记与“me”别名一起使用。此标记的长度为(40),但具有会话部分的标记的长度为(81)。 没有会话部分的访问令牌将适用于某些情况

例如: - https://graph.facebook.com/?access_token = 116122545078207 | EyWJJYqrdgQgV1bfueck320z7MM。 但是带有“me”别名的Graph API只能使用会话部分的标记。

答案 12 :(得分:0)

我不知道令牌何时到期,但他们确实如此,否则将无法提供离线权限。

无论如何,有时候要求用户提供离线权限是一种过度杀伤力。根据您的需要,只要在用户的浏览器中打开网站,令牌就足够了。为此,可能有一个更简单的解决方案 - 定期使用iframe重新定位用户:facebook auto re-login from cookie php

为我工作......