Маркеры доступа

Если для входа в приложение используется «Вход через Facebook», приложение получает маркер доступа, который обеспечивает временный безопасный доступ к различным API Facebook.

Маркер доступа — это скрытая строка, которая идентифицирует пользователя, приложение или страницу и может использоваться для вызовов API Graph. Есть несколько способов получения маркеров; все они будут рассмотрены в этом документе. В маркере указывается, до какого срока он действителен и каким приложением создан. Чтобы пройти проверки конфиденциальности, большинство вызовов API на Facebook должны содержать маркер доступа. В различных случаях используются разные типы маркеров доступа.

Тип маркера доступа Описание

Маркер доступа пользователя

Это самый распространенный тип маркера. Он требуется всегда, когда приложение вызывает API, чтобы определить, изменить или записать данные Facebook от лица определенного человека. Получение маркеров доступа пользователя обычно осуществляется через диалог «Вход», но пользователь должен предоставить на это разрешение.

Маркер доступа к приложению

Этот маркер позволяет считывать и изменять настройки приложения. Он также может применяться для публикации действий Open Graph. Маркер создается с помощью секрета, заранее согласованного между приложением и Facebook, и затем используется при вызовах, изменяющих настройки всего приложения. Для получения маркера доступа приложения нужно отправить вызов с сервера на сервер.

Маркер доступа к Странице

Он похож на маркер доступа пользователя, но разрешает API определять, записывать или изменять данные Страницы Facebook. Чтобы получить маркер доступа Страницы, нужно получить маркер доступа пользователя и запросить разрешение manage_pages. При наличии маркера доступа пользователя вы получаете маркер доступа Страницы через API Graph.

Маркер клиента

Маркер клиента применяется для идентификации приложения. Его можно встроить в двоичный код нативного мобильного приложения или в приложение для ПК. Маркер клиента не является секретным идентификатором, поскольку встраивается в приложения. Он обеспечивает доступ к ограниченному числу API на уровне приложения. Маркер клиента указывается в Панели приложений. Он используется редко, поэтому мы не будем рассматривать его в этом документе. О маркерах клиента можно прочитать в документации по API, в которых они применяются.

Создание маркеров доступа

— Маркеры доступа пользователя

— Маркеры доступа приложения

— Маркеры доступа Страницы


Маркеры доступа пользователя

Хотя каждая платформа использует разные API для создания маркеров доступа пользователя, в основе процесса лежит общая для всех платформ стратегия.

Разные платформы применяют разные методы для запуска этого процесса и обладают функциями, позволяющими управлять маркерами доступа от лица разработчика и человека, предоставившего разрешения.

JavaScript

Facebook SDK для JavaScript автоматически получает и сохраняет маркеры доступа пользователя в файлах «cookie» в браузере. Чтобы получить маркер доступа пользователя, можно отправить вызов к FB.getAuthResponse и получить в отклике свойство accessToken.

Android

Facebook SDK для Android автоматически управляет маркерами доступа пользователя с помощью класса com.facebook.AccessToken. Чтобы узнать больше о получении маркера доступа пользователя, интегрируйте «Вход через Facebook» для Android. Маркер доступа пользователя можно просмотреть в Session.getCurrentAccessToken.

iOS

Facebook SDK для iOS автоматически управляет маркерами доступа пользователя с помощью класса FBSDKAccessToken. Чтобы узнать больше о получении маркера доступа пользователя, интегрируйте «Вход через Facebook» для iOS. Маркер доступа можно просмотреть в FBSDKAccessToken.currentAccessToken.

Веб-приложение (без JavaScript)

При разработке веб-приложения без помощи Facebook SDK для Javascript нужно будет создать маркер доступа при выполнении действий, описанных в соответствующем документе.

Примеры кода

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 SDK для iOS и Android получают маркеры длительного действия по умолчанию.

Приложения со стандартным доступом к API Marketing на Facebook и использующие маркеры длительного действия получают маркеры с неограниченным сроком действия. Эти маркеры тоже могут быть аннулированы, но не только по причине прекращения срока действия. Это также касается маркеров доступа для системных пользователей Business Manager.

Перенос маркеров

Важно понимать, что маркеры доступа можно переносить. С их помощью можно отправлять вызовы к серверам Facebook из мобильного клиента, веб-браузера или с вашего сервера. Маркер, полученный на клиенте, можно передать на сервер и использовать его в вызовах с сервера на сервер. Маркер, полученный с помощью серверного вызова, можно передать на клиент и отправлять вызовы с клиента.

Перемещать маркеры между клиентом и сервером следует через защищенное HTTPS-соединение, чтобы обеспечить безопасность аккаунтов. О последствиях перемещения маркеров между клиентами и сервером см. здесь.

Маркеры доступа приложения

Маркеры доступа приложения позволяют отправлять запросы к API Facebook от лица приложения, а не пользователя. С их помощью можно изменять параметры приложения, создавать тестовых пользователей, управлять ими и просматривать статистику приложения.

Ограничения

Запросам с маркером доступа приложения иногда видны не все данные, которые отображаются при использовании маркера пользователя. Если ваше приложение должно считывать и использовать данные пользователя, нужно применять маркер доступа пользователя, а не приложения.

Маркеры доступа приложения считаются незащищенными, если приложению присвоено свойство Native/Desktop в дополнительных настройках Панели приложений. Следовательно, они не будут работать с вызовами API. Дело в том, что нативные приложения или приложения для ПК предположительно содержат встроенный секрет (поэтому маркер доступа приложения, созданный с помощью этого секрета, не является безопасным).

Создание маркера доступа приложения

Чтобы создать маркер доступа приложения, нужно отправить вызов API Graph.

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

Этот вызов возвратит маркер доступа приложения, который можно использовать вместо маркера доступа пользователя для совершения вызовов API, как описано выше. Из соображений безопасности маркер доступа приложения ни в коем случае нельзя встраивать в клиентский код, так как это позволит любому, кто загрузит вашу веб-страницу или декомпилирует приложение, узнать его секрет. В результате этот человек сможет изменить ваше приложение. Поэтому чаще всего вы будете использовать маркеры доступа приложения только в вызовах, отправляемых с сервера на сервер.

Примечание. Этот запрос использует секрет приложения, поэтому его ни при каких условиях нельзя вставлять в клиентский код или в двоичный код приложения, который можно декомпилировать. Очень важно, чтобы никто и никогда не узнал секрет вашего приложения. Следовательно, этот вызов API можно выполнять только с помощью серверного кода.

Существует еще один способ отправки вызовов к API Graph, при котором маркер доступа приложения не требуется. Вы можете просто передать ID и секрет приложения как параметр access_token:

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

Что выбрать, этот способ или маркер доступа, зависит от того, где скрыт секрет вашего приложения.

Маркеры доступа Страницы

Эти маркеры используются в вызовах API Graph для управления Страницами Facebook. Чтобы создать такой маркер, администратор Страницы должен предоставить дополнительное разрешениеmanage_pages. Имея это разрешение, вы можете получить маркер доступа Страницы с помощью маркера доступа пользователя с нужными разрешениями. Для этого нужно выполнить следующий запрос API Graph:

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, о которых рассказано в статье Маркеры и роли.