首页 文章

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

提问于
浏览
120

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

12 回答

  • 1

    与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仅适用于具有会话部分的令牌 .

  • 0

    挖了一下之后,我发现了这个 . 这似乎是答案:

    Updated (11/April/2018)

    • 令牌将在约60天后过期 .

    • 当使用您的应用的用户向Facebook的服务器发出请求时,令牌将每天刷新一次,最多90天 .

    • 所有访问令牌需要在使用您的应用程序的人的同意下每90天续订一次 .

    Facebook change announce (10/04/2018)

    Facebook updated token expiration page (10/04/2018)

    offline_access:允许您的应用程序随时代表用户执行授权请求 . 默认情况下,大多数访问令牌在短时间后过期,以确保应用程序仅在主动使用应用程序时代表用户发出请求 . 此权限使我们的OAuth endpoints 返回的访问令牌持久 .

    它是一个请求的权限值 .

    http://developers.facebook.com/docs/authentication/permissions

    UPDATE

    offline_access权限已被删除 .

    https://developers.facebook.com/docs/roadmap/completed-changes/offline-access-removal/

  • 3

    试试这可能会对你有所帮助

    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 endpoints 返回的访问令牌持久 . 但根据facebook未来升级,offline_acees功能将从2012年10月3日起永久弃用 . 并且用户将获得60天长期访问令牌,并且在访问令牌到期之前Facebook将通知您或者您可以获得您的自定义通知功能从Facebook Api获取到期值..

  • 29

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

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

  • 62

    我带着与OP相同的问题来到这里,但是建议使用offline_access的答案正在为我带来危险信号 .

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

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

  • 1

    是的,它们确实会过期 . 有一个'expires'值与'access_token'一起传递,从我可以告诉它约2小时 . 我一直在寻找,但我没有办法要求更长的到期时间 .

  • 0

    因为我有同样的问题 - 请参阅ben biddington关于此主题的优秀帖子,他用错误的令牌和正确的类型来澄清所有这些问题以发送请求 .

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

  • 4

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

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

    注意:如果应用程序未请求offline_access权限,则访问令牌是有时间限制的 . 当用户退出Facebook时,时间限制的访问令牌也会失效 . 如果应用程序已获得offline_access权限来自用户的访问令牌没有到期 . 但是,只要用户更改其密码,它就会失效 .

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

  • 6

    点击这个以交换一个很长的生活/非过期的短生活访问令牌(页面)一:

    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
    
  • 21

    登录Facebook帐户并编辑您的应用程序设置(帐户 - >应用程序设置 - >使用您帐户的应用程序的其他权限) . 取消选中权限(当我不使用应用程序时访问我的数据(offline_access)) . 然后当您登录应用程序时,face将发布新令牌 .

  • 8

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

    我不知道令牌何时到期,但他们确实如此,否则将无法提供离线权限 .

    无论如何,有时需要用户提供离线权限是一种矫枉过正 . 根据您的需要,也许它是_2362652的浏览器 . 为此,可能有一个更简单的解决方案 - 定期使用iframe重新定位用户:facebook auto re-login from cookie php

    为我工作......

相关问题