Identificadores de acceso

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

Un identificador de acceso es una cadena opaca que identifica a un usuario, una aplicación o una página, y que la aplicación puede utilizar para realizar llamadas a la API Graph. Los identificadores de acceso se obtienen con distintos métodos; todos ellos se tratan en este documento. El identificador incluye información acerca de la caducidad del identificador y la aplicación que lo ha generado. Debido a comprobaciones de privacidad, la mayoría de las llamadas a la API en Facebook deben incluir un identificador de acceso. Existen distintos tipos de identificador de acceso para distintos casos de uso:

Tipo de identificador de acceso Descripción

Identificador de acceso de usuario

El identificador de usuario es el tipo de identificador más común. Es necesario cada vez que la aplicación solicita a una API que lea, modifique o escriba los datos de Facebook de una persona concreta en nombre de esta. Los identificadores de acceso suelen obtenerse mediante un cuadro de diálogo de inicio de sesión y requieren que la persona conceda permiso a la aplicación.

Identificador de acceso a la aplicación

Esta clase de identificador de acceso es necesaria para modificar y leer la configuración de las aplicaciones. También puede utilizarse para publicar acciones de Open Graph. Se genera empleando 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 identificador de acceso a la aplicación se obtiene mediante una llamada de servidor a servidor.

Identificador de acceso a la página

Estos identificadores 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 conseguir un identificador de acceso a la página, debes comenzar obteniendo un identificador de acceso de usuario y solicitando el permiso manage_pages. Una vez tienes el identificador de acceso de usuario, obtienes el identificador de acceso a la página mediante la API Graph.

Identificador de cliente

El identificador de cliente es un identificador que se puede insertar en archivos binarios nativos para móviles o en aplicaciones para ordenador a fin de identificar tu aplicación. No está pensado como identificador secreto porque está insertado en las aplicaciones. El identificador de cliente se utiliza para acceder a las API en el nivel de 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 cualquier API que lo emplee.

Generación de identificadores de acceso

- Identificadores de acceso de usuario

- Identificadores de acceso a la aplicación

- Identificadores de acceso a la página


Identificadores de acceso de usuario

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

Cada plataforma tiene sus métodos para poner en marcha este proceso e incluye funciones para administrar los identificadores de acceso en nombre del desarrollador y la persona que concede los permisos:

JavaScript

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

Android

El SDK de Facebook para Android gestiona automáticamente los identificadores de acceso de usuario mediante la clase com.facebook.AccessToken. Puedes obtener más información sobre cómo obtener un identificador de acceso de usuario implementando el inicio de sesión con Facebook para Android. Puedes recuperar este identificador inspeccionando la clase Session.getCurrentAccessToken.

iOS

El SDK de Facebook para iOS gestiona automáticamente los identificadores de acceso de usuario mediante la clase FBSDKAccessToken. Puedes obtener más información sobre cómo obtener un identificador de acceso de usuario implementando el inicio de sesión con Facebook para iOS. Puedes recuperar este identificador inspeccionando FBSDKAccessToken.currentAccessToken.

Web (sin JavaScript)

Al desarrollar una aplicación en la web sin el SDK de Facebook para JavaScript, deberás generar un identificador de acceso durante los pasos descritos en dicho 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;
  } 
} );

Identificadores de corta y larga duración

Existen dos modalidades de identificadores de acceso de usuario: de corta y de larga duración. Los identificadores 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. A pesar de esto, debes tener en cuenta que la caducidad de un identificador puede cambiar sin previo aviso y producirse antes de lo esperado. Puedes obtener más información en la documentación sobre gestión de errores.

Los identificadores de acceso generados mediante el inicio de sesión web son de corta duración, pero puedes convertirlos en identificadores 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 móviles que utilizan los SDK de Facebook para iOS y Android obtienen identificadores de larga duración de forma predeterminada.

Las aplicaciones que disponen de acceso estándar a la API de marketing de Facebook, al utilizar identificadores de larga duración, reciben identificadores de larga duración sin fecha de caducidad. Estos identificadores están sujetos a invalidación por otros motivos, pero no caducan en función del tiempo transcurrido. Lo mismo sucede con los identificadores de acceso para usuarios del sistema en Business Manager.

Los identificadores son portables

Un aspecto importante acerca de los identificadores de acceso es que son portables. Una vez tienes uno, puedes utilizarlo para realizar llamadas desde un cliente móvil o un navegador web, o desde tu servidor a los servidores de Facebook. Si obtienes un identificador en un cliente, puedes enviarlo a tu servidor y utilizarlo para realizar llamadas de servidor a servidor. Si lo obtienes mediante una llamada de un servidor, también puedes enviarlo a un cliente y realizar llamadas desde él.

El transporte de identificadores entre cliente y servidor debe realizarse 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 trasladar identificadores entre tus clientes y tu servidor.

Identificadores de acceso a la aplicación

Los identificadores 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. Pueden utilizarse para modificar los parámetros de la aplicación, crear y gestionar 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 identificador de acceso de usuario no siempre lo son con un identificador de acceso a la aplicación. Si lees datos de usuario y los utilizas en tu aplicación, debes utilizar un identificador de acceso de usuario, no a la aplicación.

Los identificadores de acceso a la aplicación se consideran poco seguros si la aplicación está establecida 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 ordenador incluyen su clave secreta (por lo que el identificador de acceso a la aplicación generado con dicha clave secreta no es seguro).

Generación de un identificador de acceso a la aplicación

Para generar un identificador 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 identificador de acceso a la aplicación que puede utilizarse en lugar de un identificador de acceso de usuario para realizar llamadas a la API, como se ha indicado antes. De nuevo por motivos de seguridad, el identificador de acceso a la aplicación nunca debe incluirse en el código del cliente, pues esto 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 podría modificarla. Esto implica que, la mayor parte del tiempo, utilizas los identificadores 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 debe incluirse en el código del cliente o en un archivo binario de la aplicación que pueda descompilarse. Es importante no compartir nunca con nadie la clave secreta de la aplicación. Por tanto, esta llamada a la API solo debe realizarse empleando código de servidor.

Existe otro método para realizar llamadas a la API Graph que no requiere el uso de un identificador de acceso a la aplicación generado. Puedes pasar el identificador y la clave secreta de tu 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 identificador de acceso generado o este método depende de dónde ocultes la clave secreta de la aplicación.

Identificadores de acceso a la página

Los identificadores de acceso a la página se utilizan en llamadas a la API Graph para gestionar páginas de Facebook. Para generar uno, un administrador de la página debe conceder un permiso ampliado llamado manage_pages. Una vez otorgado este permiso, puedes recuperar el identificador de acceso a la página empleando el identificador de acceso de usuario con los permisos necesarios y la siguiente solicitud a la API Graph:

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

Esto devuelve una lista de las páginas administradas por una persona con alguna información adicional, como la categoría a la que pertenecen, sus identificadores de acceso y los permisos que tiene el administrador para ellas.

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

El identificador de acceso a la página te permite realizar llamadas a la API en su nombre. Por ejemplo, podrías publicar una actualización de estado en una página (en vez de en la biografía del usuario), o leer los datos de estadísticas de la página.

Estos identificadores de acceso son únicos para cada página, administrador y aplicación.

Los administradores de página tienen distintos roles, como se indica en la matriz perms devuelta (ver ejemplo anterior). Las funciones disponibles para cada uno dependen de los valores del elemento perms. Puedes consultar una lista completa en la sección Identificadores y roles.