Tokens de acceso

Cuando alguien se conecta con una aplicación mediante el inicio de sesión con Facebook, la aplicación podrá obtener un token que proporciona acceso temporal y seguro a las API de Facebook.

Un token de acceso es una cadena opaca que identifica a un usuario, aplicación o página, y que la aplicación puede utilizar para realizar llamadas a la API Graph. Los tokens de acceso se obtienen con distintos métodos, los cuales describiremos más adelante en este documento. El token incluye información acerca de su caducidad y de la aplicación 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 acceso Descripción

Token de acceso del usuario

El token de usuario es el tipo de token más común. Se necesita cada vez que la aplicación solicita a una API que lea, modifique o escriba 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 aplicación.

Token de acceso a la aplicación

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

Token de acceso a la página

Estos tokens de acceso son similares 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 del usuario y solicitar el permiso manage_pages. Una vez que tengas el token de acceso del 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 aplicaciones binarias nativas para celulares o en aplicaciones para computadoras y sirve para identificar la aplicación. No está diseñado para ser un identificador secreto porque se inserta en las aplicaciones. El token de cliente se utiliza para acceder a las API del nivel de la aplicación, aunque solo a un subconjunto muy limitado. Se encuentra en el panel de la aplicación y, como se utiliza en pocas ocasiones, no se tratará en este documento, sino en la documentación de las API que lo usen.

Generar tokens de acceso

- Tokens de acceso del usuario

- Tokens de acceso a la aplicación

- Tokens de acceso a la página


Tokens de acceso del usuario

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

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:

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.

Android

El SDK de Facebook para Android administra automáticamente los tokens de acceso del 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 del usuario, inspecciona Session.getCurrentAccessToken.

iOS

El SDK de Facebook para iOS administra automáticamente los tokens de acceso del 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.

Web (sin JavaScript)

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

Ejemplos de código

Android

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

iOS

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

JavaScript (web)

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

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, 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 aplicación.

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

Las aplicaciones 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.

Los tokens son 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 desde un cliente móvil, un navegador web o tu servidor a los servidores de Facebook. 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.

Tokens de acceso a la aplicación

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

Limitaciones

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

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

Generar un token de acceso a la aplicación

Para generar un token de acceso a la aplicación, necesitas realizar una llamada a la API Graph:

GET /oauth/access_token
    ?client_id={app-id}
    &client_secret={app-secret}
    &grant_type=client_credentials

Esta llamada devuelve un token de acceso a la aplicación 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 aplicación en el código del cliente, pues esto le daría a cualquiera que cargara tu página web o descompilara la aplicación acceso completo a la clave secreta de la aplicación y la posibilidad de modificarla. De lo anterior se implica que, la mayor parte del tiempo, utilizarás los tokens de acceso a la aplicación solo en llamadas de servidor a servidor.

Ten en cuenta que, como esta solicitud utiliza la clave secreta de tu aplicación, nunca se debe incluir en el código del cliente o en un binario de aplicación que se pueda descompilar. Es importante que nunca compartas con nadie la clave secreta de la aplicación. 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 aplicación generado. Puedes simplemente pasar el identificador y la clave secreta de la aplicación como el parámetro access_token al realizar una llamada:

https://graph.facebook.com/endpoint?key=value&access_token=app_id|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 aplicación.

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 uno, un administrador de la página debe conceder un permiso ampliado llamado manage_pages. Una vez concedido este permiso, puedes recuperar el token de acceso a la página usando un token de acceso de usuario con los permisos necesarios y la siguiente solicitud de la API Graph:

GET /me/accounts HTTP/1.1
Host: graph.facebook.com

Esto devuelve una lista de páginas administradas por la persona, con alguna información adicional sobre la página, como la categoría de la página, los permisos que el administrador tiene en ella y el token de acceso a ella:

{
  "data": [
    {
      "category": "Product/service",
      "name": "Sample Page",
      "access_token": "{access-token}",
      "id": "1234567890",
      "perms": [
        "ADMINISTER",
        "EDIT_PROFILE",
        "CREATE_CONTENT",
        "MODERATE_CONTENT",
        "CREATE_ADS",
        "BASIC_ADMIN"
      ]
    }, 
}

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 aplicación.

Los administradores de página tienen distintos roles, como se muestra arriba en la matriz perms devuelta. Las funciones disponibles para cada rol dependen de los valores perms que se describen en Tokens y roles.