Token d'accesso di lunga durata

I token d'accesso della Pagina e utente predefiniti sono di breve durata, con validità di poche ore; tuttavia, puoi scambiare un token di breve durata con uno di lunga durata.

Quando usi l'SDK per iOS, Android o JavaScript, l'SDK aggiorna automaticamente i token se la persona ha utilizzato la tua app negli ultimi 90 giorni. Le app mobili native che utilizzano gli SDK di Facebook dispongono di token d'accesso utente di lunga durata, validi per circa 60 giorni. Questi token vengono aggiornati una volta al giorno, quando l'utente che utilizza la tua app invia una richiesta ai server di Facebook. Se non viene eseguita alcuna richiesta, il token scade dopo 60 giorni e l'utente dovrà ripetere il flusso di accesso per ottenerne uno nuovo.

Versione dell'API Graph più recente: v21.0

Ottenere un token d'accesso utente di lunga durata

Se hai bisogno di un token d'accesso utente di lunga durata, puoi generarne uno da un token d'accesso utente di breve durata. Un token di lunga durata è valido circa 60 giorni.

Avrai bisogno dei seguenti elementi:

  • Un token d'accesso utente valido
  • Il tuo ID app
  • La tua chiave segreta

Interroga l'endpoint 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}" 

Esempio di risposta

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

Il flusso di lavoro per generare un token d'accesso utente di lunga durata è il seguente:

Una volta ottenuto il token di lunga durata, lo puoi usare dal server o rimandarlo al client e utilizzarlo da lì.

Precisazioni

  • Non puoi utilizzare un token scaduto per richiedere un token di lunga durata. Se il token è scaduto, l'app deve chiedere all'utente di ripetere il flusso di accesso per rigenerare un nuovo token d'accesso di breve durata.

  • Effettua la chiamata dal tuo server, non da un client. La chiave segreta è inclusa nella chiamata all'API, perciò la richiesta non dovrà essere lato client. Implementa un codice lato server per eseguire la richiesta e passa la risposta, contenente il token di lunga durata, al codice lato client. La stringa sarà diversa da quella del token originale, perciò se li stai memorizzando sostituisci quello precedente.

  • Non usare gli stessi token di lunga durata su più client web (ovvero, se l'utente accede da più computer). Usali invece sul server per creare un codice e ottenere un token di lunga durata anche sul client. Vedi le informazioni riportate di seguito sulla creazione di token di lunga durata da token di lunga durata lato server.

Ottenere un token d'accesso della Pagina di lunga durata

Se hai bisogno di un token d'accesso della Pagina di lunga durata, puoi generarne uno da un token d'accesso utente di lunga durata. Il token d'accesso della Pagina di lunga durata non ha una data di scadenza e scade o non è più valido solo a determinate condizioni.

Avrai bisogno dei seguenti elementi:

Interroga l'endpoint 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}"

Esempio di risposta

{
  "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"
    }
  }
}

Ottenere token di lunga durata per i client

Facebook fornisce un'opzione per ottenere token d'accesso di lunga durata per le app, per evitare di attivare i sistemi antispam automatici di Facebook. Le app che:

  • hanno un proprio sistema di autenticazione (ad es. con nome utente e password);
  • archiviano un token d'accesso di Facebook sui loro server per gli utenti che utilizzano client diversi (app mobili native o per browser);
  • effettuano chiamate all'API da tutti questi client diversi.

In linea generale, puoi ottenere un token di lunga durata dal client nei modi seguenti:

  1. Utilizzando un token d'accesso valido e di lunga durata, il server invia una richiesta per ottenere un codice da Facebook.
  2. Facebook reinvia un codice al tuo server e tu lo inoltri in modo sicuro al client.
  3. Il client utilizza questo codice per richiedere un token di lunga durata da Facebook.
  4. Facebook invia al client un token di lunga durata che viene utilizzato per pubblicare storie o eseguire query sui dati.

Ottenere un codice

Interroga l'endpoint GET oauth/client_code. L'URI di reindirizzamento deve essere il valore esatto impostato nella Dashboard gestione app nella scheda Facebook Login > Impostazioni client > Impostazioni 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}" 

Esempio di risposta

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

Recuperare il codice per un token d'accesso di lunga durata

Una volta ottenuto il codice dal server di Facebook invialo al client tramite un canale sicuro. Successivamente, devi inviare una richiesta dal client all'endpoint /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}"

machine_id è un parametro facoltativo che identifica e traccia i client e viene utilizzato per la sicurezza e la prevenzione dallo spam. È un valore per client, non per utente. Se hai già effettuato chiamate per ottenere un codice e ti è stato fornito un machine_id, devi includerlo nella tua richiesta di codice.

Esempio di risposta

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

Il flusso di lavoro per generare un token di lunga durata è il seguente: