Tokens de acceso para tecnologías de Meta

Un token de acceso es una cadena opaca que identifica un usuario, una app o una página, y que la app puede utilizar para realizar llamadas a la API Graph. El token incluye información acerca de su caducidad y de la app que lo generó. Con el fin de comprobar la privacidad, la mayoría de las llamadas a la API en las apps de Meta deben incluir un token de acceso. Existen diferentes tipos de tokens de acceso que admiten diferentes casos de uso y una serie de métodos para obtener un token de acceso.

Tipo de token de accesoDescripción

Token de acceso a la app

Un token de acceso a la app se usa para leer y modificar configuraciones de la app. Se genera mediante una clave secreta de la app de Meta y se utiliza durante las llamadas con las que se cambia la configuración en toda la app. El token de acceso a la app se obtiene mediante una llamada de servidor a servidor.

Token de cliente

Se utiliza un token de cliente para acceder a las API de nivel de la app que puedes insertar en tus apps nativas o de escritorio para que puedas identificar tu app. No está diseñado para ser un identificador secreto, porque se inserta en las apps. El token de cliente se encuentra en el panel de apps de Meta.

Token de acceso a la página

Se usa un token de acceso a la página para leer, escribir y modificar los datos que pertenecen a una página de Facebook. Para obtener un token de acceso a la página, primero debes obtener un token de acceso del usuario y, luego, usar este token para obtener uno de acceso a la página mediante la API Graph.

Token de acceso de usuario del sistema

Se utiliza un token de acceso de usuario del sistema si tu app realiza acciones automáticas programáticas en las páginas o en los objetos de anuncio de los clientes de negocios, sin la necesidad de basarse en una entrada de un usuario de la app ni de solicitar la reautenticación en una fecha futura.

Token de acceso del usuario

Se utiliza un token de acceso del usuario si tu app realiza acciones en tiempo real, en función de las entradas del usuario. Se necesita cada vez que la app llama a una API para leer, modificar o escribir los datos de Facebook de una persona en particular en nombre de esta. Los tokens de acceso del usuario se suelen obtener mediante un cuadro de diálogo de inicio de sesión, y es necesario que la persona conceda permiso a la app para obtener uno de estos tokens.

Tokens de acceso de usuario

Aunque cada plataforma genera tokens de acceso mediante API distintas, todas siguen una estrategia básica para obtener un token de usuario:

Tokens de corta y larga duración

Existen dos modalidades de tokens de acceso del usuario: de corta y de larga duración. Los tokens de corta duración suelen tener una validez de una o dos horas, mientras que los de larga duración pueden alcanzar los 60 días. Sin embargo, no debes confiar en que estas duraciones serán siempre las mismas; debes tener en cuenta que la validez de un token puede cambiar sin previo aviso y caducar antes de lo esperado. Tienes más información en la documentación sobre administración de errores.

Los tokens de acceso generados mediante el inicio de sesión web son de corta duración, pero puedes convertirlos en tokens de larga duración realizando una llamada a la API desde el servidor junto con la clave secreta de la app.

Las apps para celulares que utilizan los SDK de Facebook para iOS y Android obtienen tokens de larga duración de forma predeterminada.

Las apps que disponen de acceso estándar a la API de marketing de Facebook, al utilizar tokens de larga duración, reciben tokens de larga duración sin fecha de caducidad. Estos tokens pueden quedar sin validez por otros motivos, pero no caducan en función del tiempo. Lo mismo sucede con los tokens de acceso para usuarios del sistema en el administrador comercial.

Tokens portátiles

Un aspecto importante acerca de los tokens de acceso es que la mayoría son portátiles. Sin embargo, Apple no permite trasladar tokens entre servidores. En cambio, una vez que tienes un token de acceso, puedes utilizarlo para realizar llamadas a los servidores de Facebook desde un cliente de telefonía celular, un navegador web o tu servidor. Si obtienes un token en un cliente, puedes enviarlo a tu servidor y utilizarlo para realizar llamadas de servidor a servidor. Si lo obtienes mediante una llamada de servidor, también puedes enviarlo a un cliente y realizar llamadas desde él.

La transferencia de tokens entre cliente y servidor se debe realizar de manera segura a través de HTTPS, para garantizar la seguridad de las cuentas de las personas. Aquí tienes más información sobre las implicaciones de mover tokens entre tus clientes y tu servidor.

Cada plataforma tiene sus métodos para iniciar este proceso, y cada una incluye funciones para administrar los tokens de acceso en nombre del desarrollador y la persona que concede los permisos:

Android

Los SDK de Facebook para Android administran automáticamente los tokens de acceso de usuario mediante la clase com.facebook.AccessToken. Descubre cómo obtener un token de acceso del usuario implementando el inicio de sesión con Facebook para Android. Para recuperar este token de acceso de usuario, inspecciona Session.getCurrentAccessToken.

Código de ejemplo

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

iOS

Los SDK de Facebook para iOS administran automáticamente los tokens de acceso de usuario mediante la clase FBSDKAccessToken. Descubre cómo obtener un token de acceso del usuario implementando el inicio de sesión con Facebook para iOS. Para recuperar este token de acceso, inspecciona FBSDKAccessToken.currentAccessToken.

Código de ejemplo

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

Javascript

El SDK de Facebook para JavaScript obtiene y conserva los tokens de acceso del usuario automáticamente en cookies del navegador. Puedes obtener el token de acceso del usuario realizando una llamada a FB.getAuthResponse, que incluirá una propiedad accessToken en la respuesta.

Código de ejemplo

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

Consulta la documentación sobre los SDK web de Facebook para obtener un código completo de ejemplo.

Web (sin JavaScript)

Al crear una app web sin el SDK de Facebook para JavaScript, deberás generar un token de acceso durante los pasos descritos en ese documento.

Tokens de acceso a la app

Los tokens de acceso a la app se usan para realizar solicitudes a las API de Facebook en nombre de una app, no de un usuario. Se pueden utilizar para modificar los parámetros de la app, crear y administrar usuarios de prueba, o leer las estadísticas de la app.

Limitaciones

Algunos datos de usuario que normalmente serían visibles para una app que realiza una solicitud con un token de acceso del usuario no siempre lo son con un token de acceso a la app. Si lees datos de usuario y los utilizas en tu app, debes utilizar un token de acceso del usuario, no un token de acceso a la app.

Los tokens de acceso de app se consideran poco seguros si la app aparece como Native/Desktop en la configuración avanzada del panel de apps, por lo que no funcionan con llamadas a la API. Esto se debe a que suponemos que las apps nativas o para computadoras tendrán la clave secreta de la app insertada en alguna parte (por lo que el token de acceso a la app generado con dicha clave secreta no es seguro).

Generar un token de acceso a la app

Para generar un token de acceso a la app, necesitas los siguientes elementos:

Código de ejemplo

curl -X GET "https://graph.facebook.com/oauth/access_token
  ?client_id={your-app-id}
  &client_secret={your-app-secret}
  &grant_type=client_credentials"

Esta llamada devuelve un token de acceso a la app que se puede utilizar en lugar de un token de acceso del usuario para realizar llamadas a la API, como ya se señaló. De nuevo, por motivos de seguridad, nunca se debe incluir el token de acceso a la app en el código del cliente, pues esto le daría a cualquiera que cargara tu página web o descompilara la app acceso completo a la clave secreta de la app y la posibilidad de modificarla. De lo anterior se desprende que, la mayor parte del tiempo, utilizarás los tokens de acceso a la app solo en llamadas de servidor a servidor.

Ten en cuenta que, como esta solicitud utiliza la clave secreta de tu app, nunca se debe incluir en el código del cliente o en un binario de app que se pueda descompilar. Es importante que nunca compartas con nadie la clave secreta de la app. Por tanto, esta llamada a la API solo se debe realizar con código de servidor.

Existe otro método para realizar llamadas a la API Graph que no requiere el uso de un token de acceso a la app generado. Puedes limitarte a pasar el identificador y la clave secreta de la app como el parámetro access_token al realizar una llamada:

curl -i -X GET "https://graph.facebook.com/{api-endpoint}&access_token={your-app_id}|{your-app_secret}"   

La elección entre un token de acceso generado o este método depende de dónde ocultes la clave secreta de la app.

Tokens de acceso a la página

Los tokens de acceso a la página se utilizan en llamadas a la API Graph para administrar páginas de Facebook. A fin de generar un token de acceso a la página, un administrador de la página debe concederle a tu app el permiso o los permisos necesarios de dicha página. Una vez obtenido el permiso, puedes recuperar el token de acceso a la página usando un token de acceso de usuario con los permisos necesarios.

Código de ejemplo

curl -i -X GET "https://graph.facebook.com/{your-user-id}/accounts?access_token={user-access-token}" 

Esto devuelve una lista de las páginas en las que tienes un rol, con información sobre cada página, como su categoría, los permisos específicos que tienes en cada una y el token de acceso a la página.

{
  "data": [
    {
      "access_token": "EAACEdE...",
      "category": "Brand",
      "category_list": [
        {
          "id": "1605186416478696",
          "name": "Brand"
        }
      ],
      "name": "Ash Cat Page",
      "id": "1353269864728879",
      "tasks": [
        "ANALYZE",
        "ADVERTISE",
        "MODERATE",
        "CREATE_CONTENT",
        "MANAGE"
      ]
    },
    {
      "access_token": "EAACEdE...",
      "category": "Pet Groomer",
      "category_list": [
        {
          "id": "163003840417682",
          "name": "Pet Groomer"
        },
        {
          "id": "2632",
          "name": "Pet"
        }
      ],
      "name": "Unofficial: Tigger the Cat",
      "id": "1755847768034402",
      "tasks": [
        "ANALYZE",
        "ADVERTISE",
        "MODERATE",
        "CREATE_CONTENT"
      ]
    }
  ]
}

Con un token de acceso a la página, puedes hacer llamadas a la API en nombre de la página. Por ejemplo, podrías publicar una actualización de estado en una página (en vez de hacerlo en la biografía del usuario) o leer los datos de estadísticas de la página.

Estos tokens de acceso son únicos para cada página, administrador y app.

Tokens de acceso del cliente

A partir de la versión 13 del SDK, cuyo lanzamiento está previsto a principios de 2022, se requerirá un token de cliente para todas las llamadas a la API Graph.

Al igual que los tokens de la app, los tokens de cliente hacen solicitudes a la API Graph en nombre de las apps en lugar del de los usuarios.

A diferencia de lo que sucede con otros tokens, los tokens de acceso del cliente no se pueden usar en solicitudes por sí mismos, sino que deben estar combinados con el identificador de la app. Para eso, agrega el token al final del identificador de la app, separado por una barra vertical (|):

{app-id}|{client-token}

Por ejemplo:

access_token=1234|5678

Para obtener el token de acceso del cliente para una app, haz lo siguiente:

  1. Inicia sesión en tu cuenta de desarrollador.
  2. En la página de apps, selecciona una app para abrir el panel correspondiente.
  3. En el panel, ve a Configuración > Avanzado > Seguridad > Token de cliente.

Longitud de los tokens de acceso

Es de esperar que la duración de todos los tipos de token de acceso cambie a medida que Facebook haga cambios en lo que allí almacena y en cómo están codificados. Es normal que aumenten o disminuyan con el transcurso del tiempo. Utiliza un tipo de datos de duración variable sin un tamaño máximo específico para almacenar tokens de acceso.

Más información