Meta 技术的访问口令

访问口令是识别用户、应用或公共主页的非明文字符串,应用可用访问口令来执行图谱 API 调用。口令包含关于口令过期时间和哪个应用生成口令的信息。由于隐私设置检查,Meta 应用上的大多数 API 调用需要包含访问口令。有多种访问口令可支持不同的用例,还有很多方法可获取访问口令。

访问口令类型描述

应用访问口令

应用访问口令用于读取和修改应用设置。应用访问口令使用 Meta 应用密钥生成,之后在执行调用以更改应用中的设置时,将使用该口令。您可以通过服务器到服务器的调用获得应用访问口令。

客户端口令

客户端口令用于访问应用级 API,您可将客户端口令嵌入您的原生应用或桌面应用中,以识别该应用。客户端口令嵌入应用中,因而不是密钥标识符。您可在 Meta 应用面板中找到客户端口令。

公共主页访问口令

公共主页访问口令用于读取、写入和修改属于 Facebook 公共主页的数据。如要获取公共主页访问口令,您需要先获取用户访问口令,然后通过图谱 API 使用用户访问口令获取公共主页访问口令。

系统用户访问口令

如果您的应用在业务客户的广告对象或公共主页上执行程序化的自动化操作,而不必依赖应用用户的输入或无需在未来某一天重新验证身份,则应使用系统用户访问口令。

用户访问口令

如果您的应用是根据用户输入的信息来实时采取行动,则应使用用户访问口令。每当应用以特定用户身份调用 API 从而读取、修改或写入该用户的 Facebook 数据时,都需要此类访问口令。通常可通过登录对话框获得用户访问口令,并且应用需征得用户允许才能获得此口令。

用户访问口令

虽然每个开放平台通过不同的 API 生成访问口令,但所有开放平台都遵循获取用户口令的基本策略:

短期口令和长期口令

用户访问口令分为两种形式:短期口令和长期口令。短期口令的有效期通常为一至两个小时,长期口令的有效期通常为 60 天左右。您不应假设这些有效期会维持不变;有效期可能会在不发出警告的情况下发生更改,也有可能会提前到期。详情请参阅处理错误

通过网页登录生成的访问口令是短期口令,但您可以使用应用密钥执行服务器端 API 调用,将它们转换为长期口令

使用 Facebook iOS 和 Android SDK 的移动应用默认获得长期口令。

通过长期口令享有 Facebook 市场营销 API 标准访问级别的应用将收到没有过期时间的长期口令。这些口令仍然可能因为其他原因失效,但不会仅因时间因素而过期。商务管理平台中的系统用户访问口令也是如此。

口令是可移植的

关于访问口令必须了解一点,即大部分访问口令是可移植的。然而,Apple 不允许将访问口令移植到服务器。否则,在拥有访问口令后,您就可以使用它从手机客户端、网页浏览器或您的服务器向 Facebook 服务器发出调用。如果在客户端获取口令,您可以将该口令下传到服务器,并在服务器到服务器的调用中使用。如果通过服务器调用获取口令,您也可以将口令上传到客户端,然后从客户端调用。

在客户端和服务器之间传送口令必须通过 HTTPS 安全进行,确保用户帐户的安全性。详细了解在客户端和服务器之间传送口令的含意

不同开放平台启动该流程的方法各不相同,并且提供代表开发者及授权用户管理访问口令的功能:

Android

Android 版 Facebook SDK 通过 com.facebook.AccessToken 类自动管理用户访问口令。您可以详细了解如何使用 Android 版 Facebook 登录来获取用户访问口令。您可以通过检查 Session.getCurrentAccessToken 检索用户访问口令。

示例代码

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    accessToken = AccessToken.getCurrentAccessToken();
}

iOS

iOS 版 Facebook SDK 通过 FBSDKAccessToken 类自动管理用户访问口令。您可以详细了解如何使用 iOS 版 Facebook 登录来获取用户访问口令。您可以通过检查 FBSDKAccessToken.currentAccessToken 检索访问口令。

示例代码

- (void)viewDidLoad
{
  [super viewDidLoad];
  NSString *accessToken = [FBSDKAccessToken currentAccessToken];
}

Javascript

Javascript 版 Facebook SDK 自动获取用户访问口令,并将它们保留在浏览器 Cookie 中。您可以按以下方法检索用户访问口令:调用 FB.getAuthResponse,返回的响应中将包含 accessToken 属性。

示例代码

FB.getLoginStatus(function(response) {
  if (response.status === 'connected') {
    var accessToken = response.authResponse.accessToken;
  } 
} );

请访问 Facebook 网页 SDK 文档,获取完整代码示例

网页(无 JavaScript)

如果不使用 Javascript 版 Facebook SDK 构建网页应用,您需要在执行相应文档中说明的步骤时生成访问口令。

应用访问口令

应用访问口令用于代表应用而非用户请求 Facebook API。它可以用于修改应用参数、创建和管理模拟用户,或者读取应用的成效分析。

限制

某些用户数据,在应用使用用户访问口令发出请求时通常可见,但在使用应用访问口令时不一定可见。如果要读取用户数据并在应用中使用该数据,则应使用用户访问口令,而不是应用访问口令。

如果在应用面板的高级设置中将应用设置为 Native/Desktop,应用访问口令将被视为不安全,因此无法用于调用 API。这是因为我们假定原生或桌面应用会在内部某处嵌入应用密钥(因此使用该密钥生成的应用访问口令不安全)。

生成应用访问口令

要生成应用访问口令,您需要:

代码示例

curl -X GET "https://graph.facebook.com/oauth/access_token
  ?client_id={your-app-id}
  &client_secret={your-app-secret}
  &grant_type=client_credentials"

此调用将返回应用访问口令,该口令可替代用户访问口令来执行上述 API 调用。同样,出于安全考虑,切勿将应用访问口令硬编码到客户端代码中,否则加载您的网页或反编译应用的用户会获得访问应用密钥的完整权限,从而能够修改您的应用。这意味着大多数时候,您只能在服务器到服务器调用时使用应用访问口令。

注意:该请求将使用应用密钥,所以切勿在可能被反编译的客户端代码或应用二进制文件中发出。切勿与其他人分享应用密钥。因此,只能使用服务器端代码执行此 API 调用。

还有一种方法可以向图谱 API 发出调用,并且不需要使用生成的应用访问口令。您可以在发出调用时以 access_token 参数的形式发送应用编号和应用密钥:

curl -i -X GET "https://graph.facebook.com/{api-endpoint}&access_token={your-app_id}|{your-app_secret}"   

选择使用生成的访问口令还是使用这种方法取决于您隐藏应用密钥的位置。

公共主页访问口令

可在图谱 API 调用中使用公共主页访问口令,以管理 Facebook 公共主页。如要生成公共主页访问口令,公共主页管理员必须向您的应用授予公共主页权限或所需的其他权限。获得权限后,您便可使用拥有必要权限的用户访问口令,检索公共主页访问口令。

代码示例

curl -i -X GET "https://graph.facebook.com/{your-user-id}/accounts?access_token={user-access-token}" 

这将返回您拥有身份的公共主页列表以及每个公共主页的相关信息,例如公共主页类别、您对每个公共主页拥有的特定权限以及公共主页访问口令。

{
  "data": [
    {
      "access_token": "EAACEdE...",
      "category": "Brand",
      "category_list": [
        {
          "id": "1605186416478696",
          "name": "Brand"
        }
      ],
      "name": "Ash Cat Page",
      "id": "1353269864728879",
      "tasks": [
        "ANALYZE",
        "ADVERTISE",
        "MODERATE",
        "CREATE_CONTENT",
        "MANAGE"
      ]
    },
    {
      "access_token": "EAACEdE...",
      "category": "Pet Groomer",
      "category_list": [
        {
          "id": "163003840417682",
          "name": "Pet Groomer"
        },
        {
          "id": "2632",
          "name": "Pet"
        }
      ],
      "name": "Unofficial: Tigger the Cat",
      "id": "1755847768034402",
      "tasks": [
        "ANALYZE",
        "ADVERTISE",
        "MODERATE",
        "CREATE_CONTENT"
      ]
    }
  ]
}

使用公共主页访问口令,您可以代表公共主页发起 API 调用。例如,您可以将状态更新发布到公共主页(而不是用户的时间线)或读取公共主页成效分析数据。

每个公共主页、管理员和应用的公共主页访问口令都是唯一的。

客户端访问口令

从预计在 2022 年初发布的 iOS 和 Android SDK v13.0 开始,所有对图谱 API 的调用都将需要客户端口令

与应用口令一样,客户端口令会代表应用而非用户发出图谱 API 请求。

不同于其他口令,客户端访问口令无法单独在请求中使用,而须配合应用编号使用。如要执行此操作,请在应用编号末尾附加口令,并使用竖线 (|) 分隔:

{app-id}|{client-token}

例如:

access_token=1234|5678

如要获取应用的客户端访问口令,请执行以下操作:

  1. 登录您的开发者帐户
  2. 应用页面中选择一款应用,然后打开该应用的面板。
  3. 面板中,依次前往设置 > 高级设置 > 安全 > 客户端口令

访问口令长度

Facebook 会更改存储于其中的内容及其编码方式,所以所有类型的访问口令长度日后均可能变化。访问口令的长度日后可能会增长或减少。请使用可变的长度数据类型,而不要指定存储访问口令的最大长度。

详细了解