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

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

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

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

其请求的许可值。

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

UPDATE

offline_access权限刚刚被删除。

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

试试这可能会对你有帮助

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的未来升级,offline_aceesfunction将永远从2012年10月3日起被弃用。用户将获得60天的长期访问令牌,在访问令牌到期之前,Facebook将通知您或您可以获得自定义通知function从Facebook Api获取到期值

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

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

我来到这里的问题与OP相同,但是提示使用offline_access的答案正在为我提高红旗。

从安全angular度来看,对用户的Facebook账号进行离线访问与使用Facebook进行单一login相比,质量不同,function也更加强大,不应该轻易使用(除非真的需要)。 当用户授予此权限时,“应用程序”可以随时随地检查用户的帐户。 我把“应用程序”放在引号中,因为它实际上是任何有证书的工具 – 你可以编写一整套与Web服务器无关的工具,可以访问用户同意分享给用户的任何信息证书。

我不会使用此function来解决一个简短的令牌生命周期; 这不是它的预期目的。 事实上,令牌生命周期本身是一个安全function。 我仍然在寻找有关这些令牌的正确用法的详细信息(我可以坚持吗?我应该如何保护它们?Facebook是否将OAuth 2.0“刷新令牌”embedded到主令牌中?如果不是,它在哪里? /或如何刷新?),但我很确定offline_access不是正确的方法。

是的,他们过期了。 有一个'expires'的价值是与'access_token'一起传递,从我可以告诉它约2个小时。 我一直在寻找,但我没有看到一个方法来请求更长的到期时间。

因为我有同样的问题 – 请参阅ben biddington在这个话题上的优秀post,他用错误的标记和正确的types来澄清所有这些问题。

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

每次用户通过Facebooklogin到您的网站时,您都可以刷新用户的访问令牌。 离线访问不能保证您获得终身访问令牌,访问令牌随着用户撤销应用程序访问或用户更改其密码而更改。

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

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

假设您将用户的Facebook UID和访问令牌存储在数据库的用户表中,每次用户点击“Login with facebook”button时,都会使用Facebook Javascript API检查login状态,然后检查响应中的连接状态,如果用户已连接到您的站点,则可以更新表中的访问令牌。

打这个来交换一个短的生活访问令牌为长期生活/不到期(页)一:

 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 

loginFacebook帐户并编辑您的应用程序设置(帐户 – >应用程序设置 – >使用您的帐户的应用程序的额外权限)。 取消选中权限(当我不使用应用程序(offline_access)时访问我的数据)。 然后当你login到应用程序时,face会预订一个新的令牌。

基本的脸谱令牌在一个小时内过期。 但是,您可以使用“交换”令牌来获得长寿命的令牌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} 

当你与facebookgraphicsAPI进行交互时,请检查以下内容。

1)应用程序连接URL应该是你的“redirect_uri”连接URL的基础: – http://www.x-minds.org/fb/connect/ redirect_uri – http://www.x-minds.org/fb/connect/redirect 2)你的“redirect_uri “在两种情况下都应该是相同的(当你请求一个validation码和一个access_token请求时)redirect_uri – http://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。 但是具有“我”别名的graphicsAPI只能使用具有会话部分的令牌。

我不知道什么时候令牌到期,但他们这样做,否则将不会有一个选项给予离线权限。

无论如何,有时要求用户给予离线权限是一个矫枉过正的事情。 根据您的需要,只要网站在用户的浏览器中打开,令牌就可以保持有效。 对于这可能有一个更简单的解决scheme – 重新定期用户使用iframe: facebook自动重新login从cookie php

为我工作…