Tokens de acceso

Un token de acceso es una cadena opaca que identifica a un usuario, una app o una página, y que la app se puede utilizar para realizar llamadas a la API Graph. Cuando alguien se conecta con una app mediante el inicio de sesión con Facebook y aprueba la solicitud de permisos, la app obtiene un token de acceso que proporciona acceso temporal y seguro a las API de Facebook. Los tokens de acceso se obtienen con distintos métodos.

El token incluye información acerca de su caducidad y de la app que lo generó. Para efectos de las comprobaciones de privacidad, la mayoría de las llamadas a la API en Facebook deben incluir un token de acceso. Según el caso de uso, hay distintos tipos de token de acceso que se pueden usar:

Tipo de token de accesoDescripción

Token de acceso 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 nombre de esta. Los tokens de acceso se suelen obtener mediante un cuadro de diálogo de inicio de sesión y requieren que la persona conceda permiso a la app.

Token de acceso a la app

Esta clase de token de acceso es necesaria para modificar y leer la configuración de la app. También se puede utilizar para publicar acciones de Open Graph. Se genera usando una clave secreta acordada previamente entre la app y Facebook, y posteriormente se utiliza durante las llamadas que cambian la configuración general de una app. El token de acceso a la app se obtiene mediante una llamada de servidor a servidor.

Token de acceso a la página

Esta clase de token de acceso es similar a los de usuario, salvo por el hecho de que proporcionan permiso para que las API lean, escriban o modifiquen los datos pertenecientes a una página de Facebook. Para obtener un token de acceso a la página, debes comenzar por obtener un token de acceso de usuario y solicitar el permiso de la página o los permisos necesarios. Una vez que tengas el token de acceso de usuario, obtén el token de acceso a la página mediante la API Graph.

Token de cliente

El token de cliente es un identificador que se puede insertar en apps binarias nativas para celulares o en apps para computadoras, y sirve para identificar la app. No está diseñado para ser un identificador secreto porque se inserta en las apps. El token de cliente se utiliza para acceder a las API del nivel de la app, aunque solo a un subconjunto muy limitado. Se encuentra en el panel de la app y, como se utiliza en pocas ocasiones, no se tratará en este documento, sino en la documentación de las API que lo usen.

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 vida 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 seguirán siempre iguales; debes tener en cuenta que la caducidad de un token puede cambiar sin previo aviso y producirse 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 son portátiles. Una vez que tienes uno, 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 forma segura, mediante 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. Para 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

Muy pocos puntos de conexión de la API Graph admiten tokens de acceso del cliente. Al igual que los tokens de apps, los tokens de cliente realizan solicitudes a la API Graph en nombre de las apps, no de los usuarios. Sin embargo, solo deben usarse en casos en los que el token se tenga que insertar en el código del cliente web o móvil en lugar de almacenarse en un servidor seguro del sistema interno. Si el punto de conexión admite otro tipo de token, además de los tokens de cliente, en lo posible, usa el otro tipo de token.

A diferencia de 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 un token de acceso del cliente, inicia sesión en el panel de apps y navega a Configuración > Avanzada > Seguridad > Token de cliente.

Longitud de los token 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