2009-03-22 13 views
6

Estoy interesado en hacer un cliente de Twitter usando Adobe Air, pero estoy un poco bloqueado en este momento, ya que no puedo encontrar una mejor manera de conectarme a la API REST de twitter ya que necesita autenticación.Uso de Javascript con la API de Twitter

Actualmente, el cliente envía una solicitud a mi servidor (un script php usando curl) con el nombre de usuario/contraseña de twitter (no encriptado) en las variables GET. Luego, el servidor realiza una solicitud a Twitter utilizando esas credenciales y genera el búfer, que se envía de vuelta al cliente, que luego lo procesa/muestra.

Esto obviamente es un agujero de seguridad horrendo, por lo que alguien sabe de una mejor (más segura) forma de hacerlo?

FYI: Estoy usando jQuery.

Respuesta

8

Existen algunas herramientas de codificación Base64. Puedes usar uno de ellos. Puede agregar un encabezado con el nombre de usuario y la contraseña codificados según las especificaciones Basic Auth

Aquí hay una publicación que hace exactamente lo que desea. http://www.aswinanand.com/blog/2009/01/http-basic-authentication-using-ajax/. La base 64 está codificada utilizando esta biblioteca de ostermiller.org

$.ajax({  
    'url': 'http://twitter.com/action/', 
    'otherSettings': 'othervalues', 
    'beforeSend': function(xhr) { 
    xhr.setRequestHeader("Authorization", "Basic " + encodeBase64(username + ":" + password) 
    }, 
    sucess: function(result) { 
    alert('done'); 
    } 
}); 
+2

no es que base64 haría las cosas más seguras ... –

+0

cierto, pero la última vez que lo verifiqué. Twitter solo es compatible con básico. – bendewey

+0

Aún recibo un mensaje de inicio de sesión cuando uso esta técnica en FF 3.6.11 - ¿ha cambiado algo? – DEfusion

0

He estado pensando en hacer algo similar con un servidor PHP proxy (la aplicación requiere más solicitudes que se les permite, sin listas blancas por lo que voy a tener que enrutar las solicitudes a través una sola IP).

Mi idea es que solo envíe la combinación de nombre de usuario/contraseña una vez y luego asigne al usuario una identificación de sesión temporal que se utiliza para futuras solicitudes. Enviar el nombre de usuario/contraseña inicial de forma segura es un poco complicado, podría encriptarlo con una sal, pero no sé qué tan fácil es descompilar las aplicaciones de AIR. Otra opción podría ser SSL (pero todavía no estoy del todo seguro de cómo funciona).

Ésta es una guía paso a paso para el concepto identificador de sesión sin embargo:

  1. usuario da aplicación AIR credenciales de Twitter.
  2. Credenciales cifradas y enviadas al servidor proxy.
  3. Autenticación probada en el proxy.
    • Si tiene éxito, se crea una sesión y se devuelve la identificación que se utilizará.
      • Tenga en cuenta que la sesión contiene una fecha/hora de caducidad y solo puede ser utilizada por una dirección IP.
    • Si no se obtiene un error, se devuelve al cliente.
  4. El cliente almacena el ID de sesión y lo utiliza en futuras solicitudes en lugar del nombre de usuario/contraseña.
    • E.g. request.php?action=get&data=friends_timeline&sessid=a3ajh83bah35nf
    • Se extendió el tiempo de caducidad de la sesión en cada actualización.
  5. Cuando el usuario cierra la sesión, se envía un mensaje de cancelación al proxy y la sesión se anula.
0

debería echar un vistazo a Spaz. http://funkatron.com/spaz - es un cliente de Twitter de código abierto escrito en Javascript para Air. La fuente está disponible en Google Code. http://code.google.com/p/spaz/

No he buscado mucho en la fuente, pero puedo ver que algunos elementos se han escrito en Flash/Flex. Estoy usando la aplicación sin embargo, y simplemente funciona.

Espero que esto te sea útil.

0

Ada es un cliente de Adobe Air Twitter escrito en Javascript. Puede descargarlo para tener una idea de lo que hace:

http://madan.org/ada

El código de Ada está en GitHub:

http://github.com/sfsam/ada/tree/master

Ada utiliza Base64. Lo bueno de Ada es que la base de código es muy pequeña, así que deberías ser capaz de resolverlo todo.