Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Facebook Oauth 2.0访问令牌是否过期?_Facebook_Oauth - Fatal编程技术网

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

Facebook Oauth 2.0访问令牌是否过期?,facebook,oauth,Facebook,Oauth,我正在Facebook上玩Oauth 2.0授权,想知道Facebook发出的访问令牌是否会过期。如果是这样,有没有办法请求长寿命访问令牌?是的,它们确实会过期。有一个“expires”值与“access_token”一起传递,据我所知大约是2小时。我一直在搜索,但我没有找到一种方法来请求更长的过期时间。在仔细研究之后,我发现了这个。答案似乎是: 更新(2018年4月11日) 代币将在大约60天后过期 当使用你的应用程序的人向Facebook的服务器发出请求时,该代币将每天刷新一次,最多90天

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

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

在仔细研究之后,我发现了这个。答案似乎是:

更新(2018年4月11日)

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

脱机访问: 使您的应用程序能够随时代表用户执行授权请求。默认情况下,大多数访问令牌在短时间后过期,以确保应用程序仅在用户积极使用应用程序时代表用户发出请求。此权限使OAuth端点返回的访问令牌长期有效

它是请求的权限值

更新

脱机访问权限不久前已被删除


与facebook graph api交互时,请检查以下事项

1) 应用程序连接URL应该是“重定向uri”的基础 连接URL:-www.x-minds.org/fb/connect/ 重定向uri-www.x-minds.org/fb/connect/redirect 2) 您的“重定向uri”在这两种情况下都应该相同(当您请求验证码和访问令牌时) 重定向uri-www.x-minds.org/fb/connect/redirect 3) 当您请求访问令牌时,应该对参数进行编码 4) 请求访问令牌时不应传递参数(type=client\u cred)。授权服务器将发出一个没有会话部分的令牌。我们无法在graph api中将此令牌与“me”别名一起使用。此令牌的长度为(40),但具有会话部分的令牌的长度为(81)。 没有会话部分的访问令牌在某些情况下可以使用

例如:-访问令牌=116122545078207 | EyWJJYqrdgQgV1bfueck320z7MM。
但是带有“me”别名的Graph API将只使用会话部分的令牌。

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

因为我也有同样的问题-请参阅ben biddington关于此主题的精彩文章,他用错误的令牌和正确的请求发送类型澄清了所有这些问题


试试看,这可能对你完全有帮助

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\u访问

scope=offline\u access
的含义是:-

使您的应用程序能够代表执行授权请求 用户在任何时候都可以访问。默认情况下,大多数访问令牌在 短时间段,确保申请仅代表客户提出请求 当用户正在积极使用应用程序时,用户的。这 权限使OAuth端点返回访问令牌 长寿命

但根据facebook的未来升级,从2012年10月3日起,离线_aces功能将永远被弃用。 用户将获得60天的长期访问令牌,在访问令牌到期之前,Facebook将通知用户,或者您可以从Facebook Api获取到期值的自定义通知功能


我带着和OP相同的问题来到这里,但这些建议使用离线访问的答案对我来说是个危险信号

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


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

每次用户通过facebook登录到您的站点时,您都可以刷新用户的访问令牌。 脱机访问不能保证您获得终身访问令牌,只要用户撤销您的应用程序访问权限或用户更改其密码,访问令牌就会更改

引自facebook

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

假设每次用户单击“使用faceb登录”时,您都将用户的facebook uid和访问令牌存储在数据库的用户表中
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 
GET /oauth/access_token?  
    grant_type=fb_exchange_token&           
    client_id={app-id}&
    client_secret={app-secret}&
    fb_exchange_token={short-lived-token}