当你俩在这两个iOS应用程序和服务器使用令牌如何处理offline_access Facebook的

2019-07-28 22:26发布

Facebook的弃用了的offline_access许可,即将2012年5月和文档不给我们如何处理它足够的信息。

我们有一个iOS应用程序和相应的服务,权力,并与Facebook在深方式利用了应用程序内的用户的好友列表集成(所以如果你的FB朋友也在使用的应用程序,你可以更轻松地连接)。 这就像所有的社交应用似乎是如何工作的,所以这里没有什么特别。

客户

我们的应用程序使用Facebook的iOS版SDK ,允许用户登录,这是我们目前要求offline_access 。 令牌是坚持我们的iOS应用,同时也发送到我们的服务器在那里保存。 客户端行为代表的用户发布更新到用户的新闻源(我们也要求publish_stream权限)。

服务器

我们的服务器定期检查,查看是否用户的FB朋友现在使用我们的应用程序。 下一次用户登录时,我们暴露在一定的方式和内容的关系,以促进该用户的朋友。 该服务器还充当代表用户的定期连接到图形API,并得到用户的当前好友列表。 这是所以我们可以考虑在用户的关系的变化,并让他们体现在我们的应用程序。 所以他们有他们做用它的下一次最好的体验,我们这样做,当用户当前没有使用的应用程序。 为了实现这一目标,我们的iOS应用发送的访问令牌,它使用了我们的服务器以及为什么我们要求offline_access

注意:如果用户退出我们的应用程序的明确,我们删除客户端和服务器的访问令牌。

问题

现在不再有我们可以使用一个永久的访问令牌,我试图找出最佳的做法仍使我们的场景中,同时利用处理Facebook的新的预期方式和扩展的访问令牌。 该文档是不幸的是没有完全有益的。

问题

答:当您通过访问最新的Facebook的iOS SDK,什么是默认的生命周期进行身份验证令牌你? 这份文件说,一个扩展的令牌请求会给你一个持续60天。 这等文件关于第一访问令牌请求会谈,并提到了不同的效度,但它目前还不清楚和它谈具体有效时间:

(重点是我的)

当您获得来自Facebook的访问令牌,这将是请求由Facebook的定义某个时间段的API立即有效的和可用的。 这一时期过去之后,访问令牌被认为已经过期,用户将需要为了再次验证了您的应用程序,以获取新的访问令牌。 对于一个给定的访问令牌是有效的持续时间取决于它是如何产生的。

也有可能会导致访问令牌,成为其预期的到期时间之前无效事件。 这些事件包括用户更改密码,刷新它的应用程序的App秘密。 具有不同的访问令牌到期时间和办案时之前其预期的到期时间是建立强大的社交体验的必不可少的一个访问令牌变得无效的处理。

B.对于客户端,现在的访问令牌不一定长期居住,是我们正确的方法:

让通过FB使用登录,然后检测每当访问令牌已过期。 如果是,则调用到FB的iOS SDK重新认证/重新授权? (这应该只是触发用户反弹出去FB iOS应用,并且在大多数情况下都立刻回到我们的应用程序与新的访问令牌)。

C.根据这篇博客 ,我发现,你只能延长访问令牌一次:

我可以退换我60天访问令牌的全新60天使用令牌?

不,对不起,你不能。 您只能延长一次交换一个有效(意为当前的)用户访问令牌。 不能扩展一个已扩展的访问令牌。

在客户端,我可以通过我的问题B.提到不过,这并不在我们的服务器上运行一个提示重新认证/重新授权处理这个问题。 我们当然可以让服务器一次续订至60天,但在61天会发生什么? 服务器刚刚停止能够同步的好友列表?

D.这似乎是有道理的,检查的每一个从睡眠应用程序启动或重新水合物时间FB访问令牌的有效性。 什么是我们的iOS应用程序,以检查它的最好方法? 有没有推荐的端点调用验证令牌? 如果我们只需要调用到https://graph.facebook.com/me传递访问令牌和检查响应?

注:我们当然可以记录expires时间,当我们最初推广的道理,但这是不可靠的,因为用户可以撤销我们的应用程序的许可,任何时候这使得expires时间上的有效性的不可靠的数据点

Answer 1:

概观

我认为,什么Facebook正努力实现的根本是为了防止应用程序从为永久历久不衰的访问用户的帐户。 因此,随着新移民的应用程序只能在再次访问帐户为60天,除非用户的迹象。

我不为Facebook工作,但这里是我的调查结果,从玩弄Facebook的图形API。

通用解决方案

  1. 每当,把他们的访问令牌,并立即扩展/刷新它,并保存用户的迹象
  2. 记录的访问令牌的到期日期
  3. 当访问令牌过期后(从记录日期或图形API的异常告诉你的话),然后通知你没有访问权限的用户,并要求他们重新登录。

答案

答:当您通过访问最新的Facebook的iOS SDK,什么是默认的生命周期进行身份验证令牌你? 这份文件说,一个扩展的令牌请求会给你一个持续60天。 这其他文件关于第一个访问令牌请求会谈,并提到了不同的效度,但目前还不清楚和它谈具体有效时间:

下面是它如何工作的:

  1. 第一次登录授予您约两小时
  2. 通过刷新访问令牌,即可获得长达60天
  3. 如果用户不登录到这60天来,有没有办法可以访问更长,而不需要登录。
  4. 如果用户取消授权您的应用程序,这60天窗户立即结束,你将无法再访问。

B.对于客户端,现在的访问令牌不一定长期居住,对我们来说是正确的做法:让通过FB使用登录,然后检测每当访问令牌已过期。 如果是,则调用到FB的iOS SDK重新认证/重新授权? (这应该只是触发用户反弹出去FB iOS应用,并且在大多数情况下都立刻回到我们的应用程序与新的访问令牌)。

如果用户访问令牌过期,那么唯一的选择就是让他们去通过登录循环就像你在说什么。

C.根据这一博客帖子,我发现,你只能延长访问令牌一次。 在客户端,我可以通过我的问题B.提到不过,这并不在我们的服务器上运行一个提示重新认证/重新授权处理这个问题。 我们当然可以让服务器一次续订至60天,但在61天会发生什么? 服务器刚刚停止能够同步的好友列表?

只能扩展的访问令牌一次。 在61天,你的运气了。 最佳通知用户,并让他们知道,除非他们登录,您将无法做任何事。

D.这似乎是有道理的,检查的每一个从睡眠应用程序启动或重新水合物时间FB访问令牌的有效性。 什么是我们的iOS应用程序,以检查它的最好方法? 有没有推荐的端点调用验证令牌? 如果我们只需要调用到https://graph.facebook.com/me传递访问令牌和检查响应?

我还没有能够找到的API相当于调试控制台 。 这FB博客文章关于无效的访问令牌会谈,但没有提到任何特别的API方法旨在测试API。

我打你的建议https://graph.facebook.com/me 会工作得很好正是他们推荐他们的榜样 。 事实上,我可能会使用这种方法在我的应用程序如检查访问令牌的积极主动的方式。

TID位

  • 当你“刷新”访问令牌,一个新的访问令牌将被退回。 响应看起来像: access_token=TOKEN&expires=5183912
  • 您只能“刷新”访问令牌一次。 如果试图“刷新”从以前的调用返回的长期令牌,它会返回同样的道理,但除非该令牌过期不抛出异常。 (换句话说,你可以放心地尝试刷新令牌)
  • 默认的访问令牌的长度似乎是约2小时
  • 如果你“刷新”的访问令牌,那么新的访问令牌似乎是一个,你会从Facebook的API获取(而不是返回原始的,短暂的访问令牌)之后

另外,如果你要玩,这些工具可以很容易地在你的代码掩埋之前测试出你的使用情况在浏览器中:

  • 图形API浏览器 -用于创建和获得访问令牌
  • 调试控制台 -对于检查令牌的有效期届满前/后刷新
  • 刷新端点 -对于手动测试扩展您的令牌


Answer 2:

伟大的答案,一个重要的补充:默认令牌持续时间1和2之间。 小时的你得到的剩余期间,用户注册,再加上1个整体小时。 例如,如果一个用户注册下午3:45,访问令牌将在下午5点到期。 为了安全起见开发商应承担它只能持续1小时。



文章来源: How to handle Facebook's deprecation of offline_access when you use token both in both iOS app and a server