Facebook Graph API 2.0 升级和 ACS

更新时间:2015 年 7 月 17 日

2015 年 4 月 30 日,所有已启用 Facebook 的应用程序将自动升级到 Facebook 图形 API v2.0。 如果将 Facebook 用作 ACS 命名空间中的标识提供者,则可能需要更改 ACS 中的 Facebook 标识提供者配置、更改应用程序的代码,或同时更改两者以避免停机。有关 Facebook 计划的详细信息,请参阅 Facebook 平台升级指南

背景

ACS 使用以下 Facebook 终结点:https://www.facebook.com/dialog/oauthhttps://graph.facebook.com/oauth/access\_tokenhttps://www.facebook.com/logout.phphttps://graph.facebook.com/me。 Facebook 将自动升级这些“无版本”图形 API 2015 年 4 月 30 日使用 v2.0 的请求。

在 ACS 中添加 Facebook 作为标识提供程序时,“电子邮件”将设为应用程序权限(默认情况下)。 如果你在 Facebook 标识提供程序配置中未选择任何应用程序权限(空字段)或选择默认值(“电子邮件”),则无需进行任何应用程序或配置更改。 如果你已选择其他应用程序权限,则应该完整地查看本主题以评估影响并采取相应的措施。

Application permissions dialog

评估影响

Facebook 所做的以下更改需要你考虑:

  • 权限

    • “basic_info”权限(每个 Facebook 请求的隐式部分)将替换为“public_profile”权限(也是隐式的)。 两者的权限集是相同的,只不过就后者而言,好友列表将作为单独的权限“user_friends”的一部分。 若要获取“basic_info”权限的等效功能,需要显式请求“user_friends”权限。

    • 对基于“好友”的权限进行了重大更改。 Facebook 平台升级指南详细介绍了它们。

    • Facebook 要求应用程序请求除“basic_profile”、“电子邮件”和“user_friends”以外的其他权限,才能完成 登录评审 过程。

  • 已拒绝的权限

    • Facebook 将允许用户使用有选择地拒绝权限的选项选择要向应用程序授予哪些权限。 应用程序将必须处理这些用例。

    • 用户无法拒绝“public_profile”权限。

    • 如果用户拒绝“电子邮件”权限,则 ACS 不会在令牌中将“电子邮件”声明传递回应用程序。

  • 应用程序作用域的用户 ID

    • 在 ACS 令牌中作为“名称标识符”声明发送的用户 ID 将从全局作用域的 ID(即,在多个 Facebook 应用程序之间使用同一用户 ID)变为应用程序作用域的 ID(即,对每个 Facebook 应用程序使用不同用户 ID)。

    • 这仅适用于新登录到应用程序的 Facebook 用户。 它对于以前已登录到应用程序的用户来说是向后兼容的。

    • 如果应用程序依赖于全局范围的用户 ID 来关联不同 Facebook 应用程序注册的用户,则必须进行调整并使用 Facebook 的业务映射 API 来执行相同的操作。

建议

如果你发现这些更改对支持 Facebook 的 ACS 应用程序有影响,以下是非详尽的建议列表。 可能并非所有这些内容都适用于你。 有关完整列表,请参阅 Facebook 平台升级指南

  • 请确保你没有任何依赖于弃用应用程序权限的依赖项。

  • 提交 Facebook 登录评审的扩展应用程序权限。 此外,你还可以缩小应用程序的规模以只使用“basic_profile”、“电子邮件”和“user_friends”应用程序权限。

  • 更新你的应用程序逻辑以处理已拒绝的权限。

  • 如果你需要跨多个 Facebook 应用程序注册关联用户,请更新你的应用程序逻辑来处理应用程序作用域的用户 ID。 使用 Facebook 的业务映射 API 执行此操作。