【问题标题】:Extending Facebook server-side access tokens gracefully优雅地扩展 Facebook 服务器端访问令牌
【发布时间】:2012-05-28 04:41:18
【问题描述】:

我有一个曾经使用 offline_access 的应用程序,显然需要更改,因为它会消失。

当用户在没有我们后端的情况下通过任意数量的 API 进行交互时,我们会使用此权限将消息发布到用户的 Facebook 墙。我们有一个网站,iPhone、Android、Blackberry 和诺基亚手机上连接到该应用程序的几个移动应用程序,以及一个与硬件设备交互的桌面应用程序,所有这些都可能导致后端尝试发布到 facebook,但只有网站允许用户使用 facebook 进行初始授权。

据我了解,使用服务器端身份验证会获得 60 天的令牌,而获得新令牌的唯一方法是重做身份验证过程,假设用户没有更改密码、登录到 facebook,并且没有'未取消授权的应用程序只会显示为一系列自动重定向。

还有其他方法可以做到这一点吗?例如,fb_exchange_token 究竟是做什么的?它适用于这种情况还是仅适用于通过 javascript API 接收的令牌?

除了整合原生 facebook API 并为网站做同样的事情之外,我们还能为这些非网站用户界面做些什么吗?


尝试使用 fb_extend_token 毫无结果。重新运行标准身份验证会返回相同的令牌,但有效期为 60 天。稍后再做一次并没有扩展令牌。我希望这意味着我每天只能这样做一次,而不是每个令牌一次。

【问题讨论】:

    标签: facebook access-token extending


    【解决方案1】:

    由于我使用的是服务器端流程并且用户永远不会看到密钥,因此我可以稍微修改我的应用程序以使用我的 APPLICATION 令牌。这些密钥属于您的应用程序,只要他们没有撤销其权限,您就可以代表用户使用 API。用户授权令牌可能会过期,但只要用户没有从他们允许的应用程序中明确删除您的应用程序,您的令牌将继续允许您使用 /user/ URL、/me 发布到墙上/ URL 将不起作用,因为您的令牌已绑定到您的应用。

    【讨论】:

    • 在 60 天的有效期内这仍然有效吗?我是否正在尝试解决一个刚刚发生的问题,因为我试图发布到“/me”而不是用户?
    • 不确定您在问什么?使用应用程序令牌实际上是一种绕过在您引导用户完成服务器端身份验证过程时获得的令牌到期时间的方法。如果您使用这些令牌并发布到 /me 以发布到用户的墙上,则该令牌将在 60 天后过期,您需要再次引导用户完成该过程以延长令牌。如果您使用您的应用程序令牌并发布到 /user/ URL,则该令牌永不过期。只要用户没有撤​​销权限,您就可以继续使用它。主要的警告是您需要将此令牌保密。
    【解决方案2】:

    我相信一旦offline_access 完全弃用,获取/交换访问令牌是完成您需要的唯一方法。

    在弃用之前具有离线访问权限的任何人仍然可以正常使用您的应用程序,至少 60 天。这段时间结束后,您必须重新授权用户并将其访问令牌再延长 60 天。为此,您让他们登录并授权您的应用程序(如有必要)。然后您使用 fb_exchange_token 扩展他们的访问令牌,因此有效期为 60 天。

    我相信你已经看过了,但是这一切都在this 文章中进行了概述,更具体地说,是关于以前使用offline_access 的部分。我还发现this 帖子对升级很有用。 Here 是另一个链接,进一步详细说明了如何处理无效令牌。

    【讨论】:

    • 我现在通过常规后端流程收到的令牌有效期为 60 天,尝试请求 fb_exchange_token 根本不会改变它们,所以我只能看到令牌上的过期时间倒计时。我在我的测试应用程序中启用了迁移,所以一旦他们完全取消许可,我可以相信这种行为吗?我找不到任何关于 fb_exchange_token 是什么的好的文档,所以我想它可能被客户端流程用来将你以这种方式获得的短期令牌换成更长寿的令牌,就像你已经过身份验证一样使用服务器端流程
    • 扩展您现在拥有的令牌并没有任何作用,因为它们已经设置为 60 天。我假设您现在拥有的令牌是通过 offline_access 权限获得的。 FB 将这些时间从永远缩短为 60 天,以准备offline_access 弃用。只有当您获得一个新的短期令牌时,您才能再次将其延长至 60 天。来自文档:“如果您想刷新仍然有效的长寿命 access_token,您必须先获得一个新的短寿命用户 access_token”
    • @spoonybard896 - 假设我有一个 60 天的访问令牌。我们在第 59 天 - 明天令牌将过期。我向用户发送一封自动电子邮件以再次登录。这会延长访问令牌的寿命吗?正如我现在尝试的那样,它没有,它只是返回相同的访问令牌。那么,以不同的方式,是否有可能获得一个全新的访问令牌? (一个新的短命的,然后我转换成一个 60 天的)? FB.Login 始终返回现有的未过期访问令牌。谢谢。
    • 据我了解,令牌一旦扩展一次,就不能再扩展。你必须得到一个新的令牌。如果您在第 59 天重新进行身份验证,您将获得相同的令牌,因为它尚未过期。我认为您只需要等到它过期,在您的身份验证流程中检测到它,然后指导用户重新进行身份验证。一旦它过期,您应该在重新认证时获得一个新的令牌,然后您可以扩展它。在此之前,您应该可以取回 60 天的延期令牌。
    • @spoonybard896 - 这真的很有用。我试图使用 fb_exchange_token 在后端扩展令牌以进行测试。那么该方法仅适用于扩展短期令牌吗?似乎是这样,因为我正在测试的令牌来自一个测试应用程序,该应用程序的新用户从未请求过offline_access权限并进行了服务器端身份验证并使用授权码获得了一个长期存在的令牌,而我从来没有能够扩展该令牌。我假设如果我再次进行授权重定向,我会得到一个新的令牌。
    猜你喜欢
    • 2013-04-04
    • 2012-06-10
    • 2012-03-30
    • 1970-01-01
    • 2012-02-22
    • 2012-02-29
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多