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




access token (11)

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

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

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

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


我不知道令牌到期的确切时间,但是他们会这样做,否则就不会有选项提供离线权限。

无论如何,有时要求用户给予离线权限是一个矫枉过正。 根据您的需要,只要网站在用户的浏览器中打开,令牌就可以保持有效。 为此,可能会有一个更简单的解决方案 - 定期使用iframe 重新定义用户: facebook自动从cookie中重新登录php

为我工作......


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

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

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

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


在与facebook图形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中使用带有“我”别名的此标记。 该令牌的长度为(40),但会话部分的令牌长度为(81)。 没有会话部分的访问令牌将适用于某些情况

例如: - https://graph.facebook.com/ = 116122545078207 | EyWJJYqrdgQgV1bfueck320z7MM。 但带有“我”别名的图形API只能使用具有会话部分的令牌。



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

API


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

更新(11 / April / 2018)

  • 令牌将在约60天后过期。
  • 当使用您的应用的人向Facebook服务器发送请求时,该令牌每天将刷新一次,长达90天。
  • 所有访问令牌需要在使用您的应用的人的同意下每90天更新一次。

Facebook更改公布(10/04/2018)

Facebook更新的令牌过期页面(10/04/2018)

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/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会预订一个新的令牌。


Christoph回答的注释: Facebook Oauth Logout注销功能需要指定一个回调函数,没有它就会失败,至少在Firefox上是这样。 Chrome无需回调即可运行。

FB.logout(function(response) {});






facebook oauth