Facebook Oauth 2.0访问令牌会过期吗?


124

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


4
为这个问题添加一些细节:当用户​​更改其Facebook密码时,即使offline_access也无效。因此,如果您在使用旧的访问令牌时遇到错误,最好放心使用并重新获得一个新的访问令牌。
晃龙


2
你们大家都只是摇滚。不管问题是什么,我都解决了...谢谢大家
vinay 2011年

3
看来Facebook将于5月1日弃用offline_access权限。将来,所有的访问令牌都将在“到期时间”(60天)用完,用户更改密码,取消授权您的应用程序或注销时到期。API。PS:如果访问令牌在注销后仍会过期,我不确定Facebook为什么将新的“过期时间”设置为60天(似乎用户倾向于在60天内注销)。也许我错过了一些东西…… 到期
Steven Wexler 2012年

1
现在,access_token的行为正在更改,您应该查看2012年7月的“重大更改”-弃用了offline_access权限,access_token的生命周期很长。
qodeninja 2012年

Answers:


64

经过一番挖掘,我发现了这个。似乎是答案:

更新(11 / April / 2018)

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

Facebook更改公告(10/04/2018)

Facebook更新了令牌到期页面(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/


2
为此,我启动了一个开源库,可能对你们有用。它是一个oAuth库,旨在通过oAuth实现支持所有社交网络。它已经支持扩展权限,包括脱机发布。 code.google.com/p/socialoauth
Tendrid

如果用户在Facebook上更改密码,则即使offline_access令牌也会过期。
Bemmu '02

不幸的是,这不是解决当前问题的“干净”方法。首先或所有要求此权限的用户都会向用户发出其他权限的警报(例如,该应用程序将能够随时访问您的Facebook帐户),这会关闭大量潜在客户。其次,如果用户更改了密码,此令牌将无效。因此,需要一种更好的方法(例如,刷新令牌)来获取新的access_token,尤其是对于富客户端ajax驱动的Web应用程序。
弗拉基米尔

24
根据他们的api文档,从2012
Ben Lesh

@Tendrid您的图书馆仅支持Facebook和Twitter。
mareoraft 2015年

30

试试这个可能对您有帮助

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是:-

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

但是根据Facebook未来的升级,从2012年10月3日起将永远不赞成使用offline_acees功能。用户将获得60天的长期访问令牌,并且在访问令牌到期之前,Facebook会通知该令牌,或者您可以获取自定义通知功能从Facebook Api获取到期值。


10
谨在此通知您,fb的api已更改,并且现在没有可用的生存时间令牌,现在脱机访问将在60天内有效。
PrateekSaluja


17

我来到这里时遇到的问题与OP相同,但答案表明使用offline_access对我来说是一个危险信号。

在安全方面,与仅使用Facebook进行单点登录相比,脱机访问用户的Facebook帐户在质量上有很大不同,并且功能更强大,并且不应轻易使用(除非您真正需要它)。当用户授予此权限时,“应用程序”可以随时随地检查用户的帐户。我将“应用程序”用引号引起来,因为它实际上是具有凭据的任何工具-您可以编写整套与网络服务器无关的工具,这些工具可以访问用户同意分享给他们的任何信息证书。

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


1
同样的疑问在这里大卫。您是否找到有关如何保护存储的令牌以供脱机访问的更多信息?
尼尔埃塞

Facebook的文档非常糟糕,但我认为情况是,持久保存未使用offline_access获得的访问令牌是相当安全的。的确,可以访问该文件的任何人(在FB用户仍处于登录状态下)都可以执行该用户授予您权限的任何操作,但这并不算太糟,因为一旦用户退出Facebook,令牌就会失效。任何地方。它仍然是一个安全漏洞(我发现您不必在/ me请求中提供您的应用程序密码很奇怪),但是它不是开放式的。如果有人抱怨,那最好随便纠正我。
David Pope 2010年

8

是的,它们确实会过期。有一个“ expires”值与“ access_token”一起传递,据我所知大约是两个小时。我一直在搜索,但没有找到请求更长的到期时间的方法。


3
如果您请求“ offline_access”权限,则令牌不会过期。
布伦丹·伯格

1
@Brendan:但它就会无效,一旦用户改变他/她的Facebook密码
晃龙

@HoàngLong对此有何提及?
查尔斯·普拉卡什·达萨里


4

每当用户通过facebook登录到您的站点时,您始终可以刷新用户的访问令牌。脱机访问不能保证您获得终身访问令牌,无论何时用户撤消了您的应用程序访问权限或用户更改了密码,访问令牌都会更改。

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

注意:如果应用程序未请求offline_access权限,则访问令牌是有时间限制的。当用户注销Facebook时,有时限访问令牌也会失效。如果应用程序已从用户那里获得offline_access许可,则访问令牌没有到期。但是,每当用户更改密码时,它就会失效。

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


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 

1

登录Facebook帐户并编辑您的应用程序设置(帐户->应用程序设置->使用您帐户的应用程序的其他许可)。取消选中权限(当我不使用应用程序时访问我的数据(offline_access))。然后,当您登录到应用程序时,face将预订一个新的令牌。



0

与facebook graph api交互时,请检查以下内容。

1)应用程序连接URL应该是“ redirect_uri”连接URL的基础:-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?但是带有“我”别名的Graph API仅适用于带有会话部分的令牌。


0

我不知道令牌何时确切到期,但是令牌确实会到期,否则就不会有授予离线权限的选项。

无论如何,有时要求用户授予脱机权限是过大的。根据您的需求,只要在用户的浏览器中打开网站,令牌就一直有效就足够了。为此,可能有一个更简单的解决方案-使用iframe定期重新登录用户:facebook从cookie php自动重新登录

为我工作...


0

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

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.