我正在玩 Facebook 中的 Oauth 2.0 授权,想知道 Facebook 发出的访问令牌是否会过期。如果是这样,有没有办法请求长期访问令牌?
在挖了一点之后,我发现了这个。答案似乎是:
更新(2018 年 4 月 11 日)
令牌将在大约 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/
试试这个可能对你有帮助
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_acees 功能将从 2012 年 10 月 3 日起永久弃用。用户将获得 60 天的长期访问令牌,并且在访问令牌到期之前 Facebook 会通知您,或者您可以获得您的自定义从 Facebook Api 获取过期值的通知功能。
请注意,Facebook 现在弃用了 offline_access 权限,转而支持您可以请求“升级”到到期的令牌。我自己现在正在处理这个问题,所以我没有更多要说的,但是这个文档可能会有所帮助:
https://developers.facebook.com/docs/offline-access-deprecation/
我带着与 OP 相同的问题来到这里,但建议使用 offline_access 的答案对我来说是个危险信号。
安全方面,离线访问用户的 Facebook 帐户与仅使用 Facebook 进行单点登录相比,在性质上是不同的,而且功能更强大,不应轻易使用(除非你真的需要它)。当用户授予此权限时,“应用程序”可以随时随地检查用户的帐户。我将“应用程序”放在引号中,因为它实际上是任何具有凭据的工具——您可以编写一整套与 Web 服务器无关的工具,这些工具可以访问用户同意与这些服务器共享的任何信息证书。
我不会使用此功能来解决较短的令牌生命周期;这不是它的预期目的。事实上,令牌生命周期本身就是一项安全功能。我仍在寻找有关正确使用这些令牌的详细信息(我可以保留它们吗?我应该如何/应该保护它们?Facebook 是否将 OAuth 2.0“刷新令牌”嵌入到主令牌中?如果没有,它在哪里和/或我如何刷新?),但我很确定offline_access 不是正确的方法。
是的,它们确实会过期。有一个与“access_token”一起传递的“过期”值,据我所知,它大约需要 2 小时。我一直在搜索,但我没有看到请求更长过期时间的方法。
因为我遇到了同样的问题 - 请参阅 ben bidton 关于此主题的出色帖子,他用错误的令牌和正确的类型来发送请求澄清了所有这些问题。
http://benbiddington.wordpress.com/2010/04/23/facebook-graph-api-getting-access-tokens/
每次用户通过 facebook 登录您的网站时,您始终可以刷新用户的访问令牌。离线访问不能保证您获得终身访问令牌,只要用户撤销您的应用程序访问权限或用户更改他/她的密码,访问令牌就会更改。
引自 Facebook http://developers.facebook.com/docs/authentication/
注意:如果应用程序没有请求offline_access权限,访问令牌是有时间限制的。当用户退出 Facebook 时,有时限的访问令牌也会失效。如果应用程序已经从用户那里获得了offline_access 权限,那么访问令牌不会过期。但是,只要用户更改他/她的密码,它就会失效。
假设您将用户的 facebook uid 和访问令牌存储在数据库的用户表中,每次用户单击“使用 facebook 登录”按钮时,您使用 facebook Javascript API 检查登录状态,然后从响应中检查连接状态,如果用户已连接到您的站点,则您可以更新表中的访问令牌。
点击这个以将短期访问令牌交换为长期/非到期(页面)一个:
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
登录 facebook 帐户并编辑您的应用程序设置(帐户 -> 应用程序设置 -> 使用您帐户的应用程序的附加权限)。取消选中权限(当我不使用应用程序时访问我的数据(offline_access))。然后,当您登录应用程序时,face 将发出一个新的令牌。
基本的 facebook 令牌大约在一个小时内到期。但是您可以使用“交换”令牌来获得长期令牌 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}
这是几年后的事了,但 Facebook Graph API Explorer 现在在访问令牌旁边有一个小信息符号,允许您访问访问令牌工具应用程序,并将 API 令牌延长几个月。在开发过程中可能会有所帮助。
https://i.stack.imgur.com/AX259.png
与 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。但是带有“me”别名的 Graph API 只能使用带有会话部分的令牌。
我不知道令牌究竟什么时候到期,但它们确实到期了,否则将无法提供离线权限。
无论如何,有时要求用户提供离线权限是一种矫枉过正的做法。根据您的需要,只要在用户的浏览器中打开网站,令牌保持有效就足够了。为此,可能有一个更简单的解决方案 - 使用 iframe 定期重新登录用户:facebook auto re-login from cookie php
为我工作...
不定期副业成功案例分享