ChatGPT解决这个技术问题 Extra ChatGPT

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

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

为这个问题添加一些细节:当用户更改他/她的 Facebook 密码时,即使是离线访问也会失效。因此,如果您在使用旧访问令牌时收到错误,最好谨慎行事并重新获得新的访问令牌。
伙计们,你们都只是摇滚。无论问题是什么,我都解决了...谢谢大家
Facebook 似乎在 5 月 1 日弃用了 offline_access 权限。将来,当“过期时间”(60 天)用完、用户更改密码、用户取消对您的应用程序的授权或用户注销时,所有访问令牌都将过期。 API。 PS 如果访问令牌在注销时仍会过期(似乎用户倾向于在 60 天内注销),我不确定为什么 Facebook 将新的“过期时间”设置为 60 天。也许我错过了什么...expiration
access_token 行为现在正在发生变化,您应该查看 2012 年 7 月的“重大变更”——offline_access 权限已被弃用,access_token 将具有较长的生命周期。

i
iluvatar_GR

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

更新(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/


为此,我创建了一个开源库,可能对你们有些用处。它是一个 oAuth 库,旨在通过 oAuth 实现支持所有社交网络。它已经支持包括离线发布在内的扩展权限。 code.google.com/p/socialoauth
如果用户在 Facebook 上更改密码,即使 offline_access 令牌也会过期。
不幸的是,这不是解决手头问题的“干净”解决方案。首先或全部请求此权限会提醒用户注意附加权限(例如,此应用程序将能够随时访问您的 Facebook 帐户),这会关闭很多潜在客户。其次,如果用户更改了他的密码,此令牌将无效。因此需要有更好的方法(例如刷新令牌)来获取新的 access_token,尤其是对于富客户端 ajax 驱动的 Web 应用程序。
根据他们的 api documentation,offline_access 自 2012 年 5 月 2 日起将不再受支持。
@Tendrid 你的图书馆只支持 Facebook 和 Twitter。
t
techhunter

试试这个可能对你有帮助

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 获取过期值的通知功能。


我想通知您,fb 的 api 已更改,现在没有可用的生命周期令牌,现在离线访问将激活 60 天。
T
Tripp Lilley

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

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


D
David Pope

我带着与 OP 相同的问题来到这里,但建议使用 offline_access 的答案对我来说是个危险信号。

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

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


大卫也有同样的疑问。您是否找到了有关如何保护为离线访问而存储的令牌的更多信息?
Facebook 的文档很糟糕,但我认为情况是保持访问令牌不是通过离线访问获得的访问令牌是相当安全的。虽然确实可以访问它的任何人(当 FB 用户仍然登录时)可以做任何用户已授予您权限的事情,但这并没有那么糟糕,因为一旦用户退出 facebook,令牌就会失效任何地方。这仍然是一个安全漏洞(我觉得很奇怪,您不必在 /me 请求中提供您的应用程序机密),但它不是开放式的。如果有人对此感到更好,请随时纠正我。
T
TerryMatula

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


如果您请求“offline_access”权限,则令牌不会过期。
@Brendan:但是一旦用户更改他/她的Facebook密码,它就会失效
@HoàngLong 对此有何参考?
z
z3cko

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

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


i
imikay

每次用户通过 facebook 登录您的网站时,您始终可以刷新用户的访问令牌。离线访问不能保证您获得终身访问令牌,只要用户撤销您的应用程序访问权限或用户更改他/她的密码,访问令牌就会更改。

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

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

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


M
MPaulo

点击这个以将短期访问令牌交换为长期/非到期(页面)一个:

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 

S
Sreekanth P

登录 facebook 帐户并编辑您的应用程序设置(帐户 -> 应用程序设置 -> 使用您帐户的应用程序的附加权限)。取消选中权限(当我不使用应用程序时访问我的数据(offline_access))。然后,当您登录应用程序时,face 将发出一个新的令牌。


M
Mr Tung

基本的 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} 

m
martinedwards

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

https://i.stack.imgur.com/AX259.png


S
Sreekanth P

与 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 只能使用带有会话部分的令牌。


C
Community

我不知道令牌究竟什么时候到期,但它们确实到期了,否则将无法提供离线权限。

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

为我工作...