Tokens de acceso de larga duración

Los tokens de acceso a la página y de acceso de usuario predeterminados son de corta duración; sin embargo, puede cambiar un token de corta duración por un token de larga duración.

Al utilizar iOS, Android o SDK para JavaScript, el SDK actualiza automáticamente los tokens si la persona ha usado tu app en los últimos 90 días. Las apps para celulares nativas que usan los SDK de Facebook obtienen tokens de acceso de usuario de larga duración, válidos por unos 60 días. Estos tokens se actualizan una vez al día cuando la persona que usa la app realiza una solicitud a los servidores de Facebook. Si no se realiza ninguna solicitud, el token caduca después de 60 días aproximadamente y la persona debe volver a realizar el proceso de inicio de sesión para obtener uno nuevo.

La versión más reciente de la API Graph: v21.0

Obtener token de acceso de usuario de larga duración

Si necesitas un token de acceso de usuario de larga duración, puedes generar uno a partir de un token de acceso de usuario de corta duración. Estos tokens suelen tener una vigencia de unos 60 días.

Necesitarás lo siguiente:

  • Token de acceso del usuario válido
  • El identificador de la app
  • La clave secreta de la app

Consulta el punto de conexión 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}" 

Ejemplo de respuesta

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

El flujo de trabajo para generar un token de acceso de usuario de larga duración es el siguiente:

Una vez que hayas recuperado el token de larga duración, podrás usarlo desde tu servidor o enviarlo al cliente para que lo use.

Advertencias

  • No puedes usar un token caducado para solicitar un token de larga duración. Si el token ha caducado, la app debe someter otra vez al usuario al proceso de inicio de sesión para volver a generar un nuevo token de acceso de usuario de corta duración.

  • Realiza la llamada desde tu servidor, no desde un cliente. Esta llamada a la API incluye la clave secreta de la app, así que nunca debes realizarla desde un cliente. Es preferible implementar código de servidor que realice la solicitud y después pasar la respuesta con el token de larga duración al código de cliente. Será una cadena distinta del token original, de modo que, si almacenas estos tokens, debes reemplazar el anterior.

  • No debes utilizar los mismos tokens de larga duración en más de un cliente web (p. ej., si el usuario inicia sesión desde más de una computadora). Es preferible utilizar los tokens de larga duración en tu servidor para generar un código y después utilizar este código para obtener un token de larga duración en el cliente. Consulta la siguiente información sobre cómo generar tokens de larga duración a partir de tokens de servidor de larga duración.

Obtener un token de acceso a la página de larga duración

Si necesitas un token de acceso a la página de larga duración, puedes generar uno a partir de un token de acceso de usuario de corta duración. El token de acceso a la página de larga duración no tendrá fecha de caducidad y solo caducará o dejará de ser válido en ciertas condiciones.

Necesitarás lo siguiente:

Consulta el punto de conexión 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}"

Ejemplo de respuesta

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

Obtener tokens de larga duración para clientes

Facebook dispone de una opción para obtener tokens de acceso de larga duración para apps para evitar que se activen los sistemas automatizados de spam de Facebook. Apps que:

  • Tienen su propio sistema de autenticación (usan nombre de usuario o contraseña, por ejemplo).
  • Almacenan en sus servidores un token de acceso de Facebook para las personas que lo usan y lo envían a distintos clientes (apps de navegador o nativas para celulares).
  • Realizar llamadas a la API desde todos estos clientes

A grandes rasgos, obtienes un token de larga duración para el cliente de la siguiente manera:

  1. Con un token de acceso de larga duración válido, tu servidor envía una solicitud para obtener un código de Facebook.
  2. Facebook envía un código a tu servidor y tú envías ese código de forma segura al cliente.
  3. El cliente usa este código para solicitar un token de larga duración a Facebook.
  4. Facebook envía al cliente un token de larga duración para publicar historias o consultar datos.

Obtener un código

Consulta el punto de conexión GET oauth/client_code. El URI de redireccionamiento debe coincidir exactamente con el de la configuración de tu panel de apps en la tarjeta Inicio de sesión con Facebook > Configuración de cliente > Configuración de 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}" 

Ejemplo de respuesta

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

Canjear el código por un token de acceso de larga duración

Una vez que recuperes el código del servidor de Facebook, tendrás que enviárselo al cliente por un canal seguro. Después, tendrás que realizar una solicitud desde el cliente al extremo: /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}"

El machine_id es un parámetro opcional que identifica a los clientes y les hace un seguimiento, y se usa por seguridad y prevención de spam. Es un valor por cliente, no por usuario. Si previamente hiciste llamadas para obtener un código y recibiste un valor machine_id, debes incluirlo en tu solicitud de código.

Ejemplo de respuesta

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

El flujo de trabajo para generar un token de larga duración es el siguiente: