我正在玩Facebook上的Oauth 2.0授权,并且想知道Facebook传递的访问令牌是否会过期。如果是这样,有没有办法请求长期访问令牌?
答案 0 :(得分:62)
在挖了一下后,我发现了这一点。这似乎是答案:
更新(11月/ 4月/ 2018)
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)
答案 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
为我工作......