Tokens d’accès de longue durée

Les tokens d’accès utilisateur et de Page par défaut ont une durée de vie courte (de l’ordre de quelques heures) ; aussi, vous pouvez échanger un token de courte durée contre un token de longue durée.

Lorsque vous utilisez le SDK iOS, Android ou JavaScript, celui-ci actualise automatiquement les tokens si la personne a utilisé votre app au cours des 90 derniers jours. Les apps mobiles natives qui utilisent les SDK Facebook obtiennent des tokens d’accès utilisateur de longue durée, valides pendant environ 60 jours. Ces tokens sont actualisés une fois par jour, lorsque la personne qui utilise votre app envoie une demande aux serveurs de Facebook. En l’absence de demande, le token expire après environ 60 jours, et la personne doit repasser par le processus de connexion pour obtenir un nouveau token.

Dernière version de l’API Graph : v19.0

Obtenir un token d’accès utilisateur de longue durée

Si vous avez besoin d’un token d’accès utilisateur de longue durée, vous pouvez en générer un à partir d’un token d’accès utilisateur de courte durée. Généralement, un token de longue durée est valide pendant environ 60 jours.

Vous aurez besoin des éléments suivants :

  • Un token d’accès utilisateur valide
  • Votre ID d’app
  • Votre clé secrète

Interrogez le point de terminaison GET oauth/access_token.

curl -i -X GET "https://graph.facebook.com/{graph-api-version}/oauth/access_token?  
    grant_type=fb_exchange_token&          
    client_id={app-id}&
    client_secret={app-secret}&
    fb_exchange_token={your-access-token}" 

Exemple de réponse

{
  "access_token":"{long-lived-user-access-token}",
  "token_type": "bearer",
  "expires_in": 5183944            //The number of seconds until the token expires
}

Le workflow de génération d’un token d’accès utilisateur de longue durée se présente ainsi :

Lorsque vous avez récupéré le token de longue durée, vous pouvez l’utiliser depuis votre serveur ou le renvoyer au client pour pouvoir l’utiliser à cet emplacement.

Avertissements

  • Vous ne pouvez pas utiliser un token expiré pour demander un token de longue durée. Si le token est arrivé à expiration, votre app doit à nouveau orienter l’utilisateur vers le processus de connexion pour générer un nouveau token d’accès de courte durée.

  • Passez cet appel depuis votre serveur, pas depuis un client. Puisque votre clé secrète est comprise dans l’appel de l’API, vous ne devriez jamais faire la demande côté client. Implémentez plutôt un code côté serveur qui fait la demande, puis renvoyez la réponse contenant le token de longue durée vers votre code côté client. Puisqu’il s’agira d’une chaîne différente du token original, vous devez remplacer l’ancien token si vous les stockez.

  • N’utilisez pas les mêmes tokens de longue durée sur plusieurs clients web (c.-à-d. dans le cas où vous vous connectez depuis plusieurs ordinateurs). Vous devez plutôt utiliser les tokens de longue durée sur votre serveur pour générer un code, puis l’utiliser pour obtenir un token de longue durée sur le client. Pour en savoir plus, consultez la section Génération de tokens de longue durée à partir des tokens de longue durée côté serveur.

Obtenir un token d’accès de Page de longue durée

Si vous avez besoin d’un token d’accès de Page de longue durée, vous pouvez en générer un à partir d’un token d’accès de Page de courte durée. Le token d’accès de Page de longue durée ne comporte pas de date d’expiration et expire ou n’est plus valide dans certaines conditions uniquement.

Vous aurez besoin des éléments suivants :

Interrogez le point de terminaison GET {app-scoped-user-id}?accounts.

curl -i -X GET "https://graph.facebook.com/{graph-api-version}/{app-scoped-user-id}/accounts?
  access_token={long-lived-user-access-token}"

Exemple de réponse

{
  "data":[
    {
      "access_token":"{long-lived-page-access-token}",
      "category":"Brand",
      "category_list":[
        {
          "id":"1605186416478696",
          "name":"Brand"
        }
      ],
      "name":"Cute Kitten Page",
      "id":"{page-id}",
      "tasks":[
        "ANALYZE",
        "ADVERTISE",
        "MODERATE",
        "CREATE_CONTENT",
        "MANAGE"
      ]
    }
  ],
  "paging":{
    "cursors":{
      "before":"MTM1MzI2OTg2NDcyODg3OQZDZD",
      "after":"MTM1MzI2OTg2NDcyODg3OQZDZD"
    }
  }
}

Obtenir des tokens de longue durée pour les clients

Facebook propose une option pour obtenir des tokens d’accès de longue durée pour les apps afin d’éviter le déclenchement des systèmes de spam automatiques de Facebook. Apps qui :

  • Possèdent leur propre système d’authentification (par exemple, utilisent un nom d’utilisateur et un mot de passe)
  • Stockent un token d’accès Facebook sur leurs serveurs pour les personnes qui utilisent d’autres clients (navigateur ou apps mobiles natives)
  • Passent des appels d’API depuis tous ces clients différents

À un niveau élevé, vous obtenez un token de longue durée pour le client comme suit :

  1. À l’aide d’un token d’accès valide de longue durée, votre serveur envoie une demande pour obtenir un code auprès de Facebook.
  2. Facebook renvoie un code à votre serveur, puis vous l’envoyez en toute sécurité au client.
  3. Le client utilise ce code pour demander un token de longue durée à Facebook.
  4. Facebook envoie un token de longue durée au client pour permettre de publier des Stories ou effectuer des requêtes de données.

Obtenir un code

Interrogez le point de terminaison GET oauth/client_code. L’URI de redirection doit correspondre à la valeur que vous avez définie dans votre Espace App sous la carte Facebook Login > Paramètres client > Paramètres OAuth.

curl -i -X GET "https://graph.facebook.com/{graph-api-version}/oauth/client_code?             
    client_id={app-id}&
    client_secret={app-secret}&
    redirect_uri={app-redirect-uri}&
    access_token={long-lived-user-access-token}" 

Exemple de réponse

{
  "code":"{code-for-your-client}"
}

Utiliser le code pour un token d’accès de longue durée

Lorsque vous avez récupéré le code depuis le serveur de Facebook, vous devez l’expédier au client par un canal sécurisé. Après cela, vous devez faire une demande depuis le client vers le point de terminaison /oauth/access_token :

curl -i -X GET "https://graph.facebook.com/{graph-api-version}/oauth/access_token?   
    code={code-for-your-client}&
    client_id={app-id}&
    redirect_uri={app-redirect-uri}&
    machine_id= {your-client-machine-id}"

Le machine_id est un paramètre facultatif qui identifie, suit les clients et est utilisé pour la sécurité et la prévention du spam. Il s’agit d’une valeur par client et non par utilisateur/utilisatrice. Si vous avez précédemment passé des appels pour obtenir un code et que vous avez obtenu un machine_id, vous devriez l’inclure dans votre demande de code.

Exemple de réponse

{
  "access_token":"{long-lived-access-token}", 
  "expires_in":5183944,           //The number of seconds until the token expires
  "machine_id":"{your-client-machine-id}"
}

Le workflow de génération d’un token de longue durée se présente ainsi :