Autenticarse en Facebook sin API con C#

En Desarrollo, Webmasters por

Como había prometido hace unos días traigo un código simple en C# como prueba de concepto para autentificarse en Facebook sin usar la API. Esto quiere decir que el programa nos permite acceder a nuestra cuenta Facebook tal y como si lo hiciésemos desde un navegador como Firefox o Chrome.

Autenticarse en Facebook sin API con C#

El análisis de todas las peticiones HTTP que he tomado como referencia las he obtenido a través de Firefox con herramientas como Firebug, Wireshark, etc… pero que no son necesarias para emplear o entender el código.

¿Por qué no autenticarse en Facebook con la API?

El motivo de por qué hacerlo sin la API es que según algunos cuando se comparten noticias o estados el alcance es mayor si lo hacemos sin la API. Esto yo no lo confirmo ni lo desmiento, ya que no lo se a ciencia cierta, pero es por ello por lo que lo hago sin la API.

El problema de hacerlo de esta forma es que el código es muy sensible a cambios que pueda hacer en un futuro Facebook en su página de acceso, mientras que con la API esto no sucedería.

¿Qué necesitamos para autentificarnos en Facebook?

Pues como siempre el código facilitado está desarrollado en C# bajo el .Net Framework 4 y se facilita un proyecto creado en Visual Studio 2010. El código es sencillo por lo que puede ser portado fácilmente a otros lenguages de programación como PHP o VB .Net.

Como siempre es muy recomendable (aunque no necesario) tener los conocimientos básicos del protocolo HTTP, para ello recomiendo la lectura de los artículos:

Para usar el código sólo necesitaremos un usuario y contraseña de Facebook que sean correctos claro está.

c# facebook icono

Análisis del código en C# para Autenticarse en Facebook sin API.

1) Petición GET a la página de acceso

El primer paso consiste en hacer una petición HTTP con el método GET a la página de acceso o página de login de Facebook que es: https://www.facebook.com/

En esta petición es muy importante que definamos un objeto CookieContainer(), ya que necesitaremos reutilizar las cookies que la página de Facebook nos envíe.

Otro aspecto muy importante es tener definido una cabecera User-Agent ya que es la que le dice a Facebook que navegador estamos usando. Yo he empleado como User-Agent el que envía mi Firefox: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0

He hecho pruebas sin enviar la cabecera User-Agent o enviando un User-Agent aleatorio y Facebook lo reconoció inmediatamente como “Navegador desconocido”.

2) Procesar código HTML de la página de login de Facebook

En este segundo paso lo que hacemos es extraer todas las variables que necesitaremos del código HTML. Estas variables son en su mayoría inputs de tipo hidden (ocultos). Los extraemos empleando diferentes expresiones regulares y las variables son las siguientes:

  • lsd: es una cadena de texto aleatoria.
  • lgnrnd: otra cadenas de texto aleatoria.
  • locale: indica el país desde el que se realiza la petición en mi caso es_ES que indica España.
  • lgnjs: indica el momento (fecha y hora) en el que es creada la petición empleando tiempo UNIX o POSIX. Para generar esta valor empleamos la función CreateTimestamp().
  • timezone: indica la zona horaria desde la que se realiza la petición . Para generar este valor se emplea la función Javascript getTimezoneOffset() la cual he tenido que portar a C# con el mismo nombre.
  • persistent: es un valor constante de “1” y con esto indicamos que el login es permanente.
  • default_persistent: es el valor por defecto de persistent y tiene el valor constante de “0”.

3) Enviar petición de acceso POST con nuestro usuario y contraseña

En este paso lo que hacemos es enviar una petición HTTP con el método POST que incluye nuestro usuario y contraseña así como todas las variables obtenidas en el paso anterior.

Es muy importante seguir empleando el objeto CookieContainer() que almacena las cookies necesarias y si todo ha ido bien Facebook nos enviará una respuesta de redirección a la URL https://www.facebook.com/?sk=welcome con las cookies de autenticación.

Resumen de como autenticarse en Facebook sin API con C#

En resumen podemos decir que el proceso consta de tres pasos:

  • Petición GET a la página de login de Facebook para obtener cookies iniciales.
  • Procesado del código HTML de la página de acceso de Facebook para extraer las variables.
  • Enviar petición POST con los datos obtenidos en los pasos anteriores para obtener cookies de autenticación en Facebook.

Podéis descargar el proyecto en C# cuyo código incluye comentarios y su uso es muy sencillo. A partir de aquí se puede seguir desarrollando el código en la dirección que uno quiera. Si os ha parecido útil el artículo nos ayudaría que dejases un +1.

Con este artículo despedimos el 2013 desde Vozidea, feliz año a todos!