访问口令

当用户使用 Facebook 登录连接应用时,应用将能够获得访问口令,用于临时安全访问 Facebook API。

访问口令是识别用户、应用或主页的非明文字符串,应用可用它来执行图谱 API 调用。 访问口令可通过多种方法获得,后文中将依次说明。 口令包含关于口令过期时间和哪个应用生成口令的信息。由于隐私设置检查,Facebook 上的大多数 API 调用需要包含访问口令。不同的访问口令有不同的用途:

访问口令类型 说明

用户访问口令

用户口令是最常使用的口令类型。 应用任何时候以特定用户身份调用 API 读取、修改或写入该用户的 Facebook 数据时,都需要此类访问口令。 用户访问口令通常通过“登录”对话框获得,并需要用户允许应用获取

应用访问口令

此类访问口令用于修改和读取应用设置,也可用于发布开放图谱操作。 它使用应用与 Facebook 之间的预定义密钥生成,之后用于执行更改整个应用设置的调用。 您可以通过服务器到服务器的调用获得应用访问口令

主页访问口令

这些访问口令与用户访问口令类似,不同之处在于它们向读取、写入或修改 Facebook 主页数据的 API 授予权限。 要获取主页访问口令,您需要先获取用户访问口令,并且请求 manage_pages 权限。 获得用户访问口令后,您可以通过图谱 API 获得主页访问口令

客户端口令

客户端口令是可以嵌入原生移动二进制文件或桌面应用以识别应用的标识符。 客户端口令不是密钥标识符,因为其是嵌入应用中的。 它用于访问应用层 API,但只能访问非常有限的子集。客户端口令可在应用面板中找到。由于客户端口令使用极少,本文不再详述。 使用客户端口令的 API 文档中会有所涉及。

生成访问口令

- 用户访问口令

- 应用访问口令

- 主页访问口令


用户访问口令

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

不同的开放平台启动该流程的方法各不相同,并且包括部署以开发者及授权用户的身份管理访问口令的功能:

Javascript

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

Android

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

iOS

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

网页(无 JavaScript)

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

代码示例

Android

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

iOS

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

JavaScript(网页)

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

短期口令和长期口令

用户访问口令分为两种形式:短期有效口令和长期有效口令。 短期有效口令的有效期通常为一两小时,长期有效口令的有效期通常为 60 天左右。 有效期不会保持不变,可能在没有警告的情况下更改,也有可能很早过期。 详情请参阅错误处理

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

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

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

口令可移植

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

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

应用访问口令

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

限制

对于使用用户访问口令发出请求的应用通常可以看见的一些用户数据,在使用应用访问口令时通常看不见。如果您是读取用户数据并在应用中使用,应使用的是用户访问口令而不是应用访问口令。

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

生成应用访问口令

要生成应用访问口令,您需要调用图谱 API:

GET /oauth/access_token
    ?client_id={app-id}
    &client_secret={app-secret}
    &grant_type=client_credentials

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

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

还有一种调用图谱 API 的方法不需要使用生成的应用访问口令。 您可以在执行调用时将应用编号和应用密钥当作 access_token 参数发送:

https://graph.facebook.com/endpoint?key=value&access_token=app_id|app_secret

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

主页访问口令

主页访问口令用于调用图谱 API,以便管理 Facebook 主页。要生成主页访问口令,主页的管理员必须授予名为 manage_pages扩展权限。获得该权限后,您可以使用具有所需权限的用户访问口令和以下图谱 API 请求来获取主页访问口令:

GET /me/accounts HTTP/1.1
Host: graph.facebook.com

这将返回该用户管理的主页列表,以及其他一些有关主页的信息(例如主页类别、管理员对该主页拥有的权限,及主页访问口令):

{
  "data": [
    {
      "category": "Product/service",
      "name": "Sample Page",
      "access_token": "{access-token}",
      "id": "1234567890",
      "perms": [
        "ADMINISTER",
        "EDIT_PROFILE",
        "CREATE_CONTENT",
        "MODERATE_CONTENT",
        "CREATE_ADS",
        "BASIC_ADMIN"
      ]
    }, 
}

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

每个主页、管理员和应用的主页访问口令都是独一无二的。

主页管理员有不同的身份,通过返回的 perms 数组表明(如上述示例所示)。它们可使用的功能取决于 perms 值(如口令和身份中所述)。