2012-02-13 14 views
6

¿Cuál es la mejor manera de hacer la autenticación de Twitter OAuth de forma segura en JavaScript?Autenticación segura de Twitter OAuth en JavaScript/jQuery (más ayudante del lado del servidor)

Estoy tratando de escribir un programa para que el usuario pueda analizar su uso de Twitter y seguidores/amigos. Escribí una versión del servidor que funciona con el módulo python tweepy.

Me gustaría compartirlo con la gente, pero me gustaría que se ejecute en el navegador para que sea escalable en lugar de ejecutarse en mi pequeño servidor.

veo otra pregunta donde el resultado es que no es recomendable y no es seguro: JavaScript OAuth sign in with Twitter

lo cual tiene sentido si se estaban enviando el secreto (app) de los consumidores o de acceso secreto (usuario) en JavaScript de la aplicación.

Pero por qué no podría construir la URL en el servidor como aquí - http://djangosnippets.org/snippets/1353/

luego enviar el URL de autenticación de vuelta al navegador, algo así de la herramienta de OAuth en la página de Twitter Mis aplicaciones (no credenciales válidas)

GET & https% 3A% 2F% 2Fapi.twitter.com% 2F1% 2F% & obtener 252Faccount% 252Fverify_credentials_json% 3D% 26oauth_consumer_key% GD0bgcgMU4MDwNfKQpLFQS3% 26oauth_nonce% 3D24ad5049501dee1292afd8cf22307d68% 26oauth_signature_method% 3DHMAC-SHA1% 26oauth_timestamp% 3D1329173626 % 26oauth_token% uPUpxsBc3D283768289LtQ6R1E z1KeD8DOSsm5XpqJaKI28ysYh% 26oauth_version% 3D1.0

Luego use jQuery para autenticarse con las credenciales del usuario y ejecutar el análisis.

Es un trabajo importante, odiaría hacer eso y luego descubrir que no funciona o es un enfoque inseguro. (o ya está hecho)

¿Eso es seguro? No parece exponer ningún secreto.

¿Funcionará eso?

Cualquier punteros/ejemplos sobre la forma correcta de hacer la autenticación para un jQuery noob, con la Autorización necesaria: cabecera y procesamiento de cookies/redireccionamiento?

Siento que me falta algo y o bien hay una razón por la que esto no funcionará, o debería existir en alguna parte, pero no lo he encontrado. ¡Muchas gracias!

Respuesta

3

El problema del Sr. McNuts, es que el oAuth requiere que pase su secreto de consumidor, por lo que incluso si construye la URL en el servidor, igual la pasará a la página web, lo que aún expondrá su secreto de consumidor a través de un proxy HTTP.

Para evitar la exposición de su secreto, deberá usar un proxy para realizar la solicitud de autenticación de Twitter y devolver el token oauth nuevamente al navegador. Si realmente te preocupa la escala, consideraría una solución de pago por escala como GAE o Heroku.

+0

. Creo que el punto de dividir la clave del consumidor y el secreto del consumidor es que usted podría exponer la clave, y nadie puede hacer nada sin el secreto. ¿Qué podría hacer alguien con solo la clave del consumidor, si no tenían el secreto del consumidor? –

+0

Sí, tienes razón. Lo que esencialmente propones es que tu servidor firme usando su secreto de consumidor, y luego se lo devuelve al cliente. Puede hacerlo, pero no es más escalable que simplemente hacer que su servidor realice la solicitud en nombre del usuario. – Alan

+0

Sí, básicamente quiero proxy la autenticación, y luego hacer que el navegador haga un montón de llamadas API. Van a ser unos pocos cientos de llamadas, hasta los límites de aceleración. Además, tomarán mucho tiempo y atan los recursos mientras se ejecutan. Así que realmente prefiero no hacerlo en el servidor, serán órdenes de magnitud de más carga. Me gustaría transferir una URL o un token al navegador y luego usar eso para hacer llamadas a la API con jQuery o JavaScript puro. –

0

No entiendo muy bien el enfoque que está proponiendo. Sin embargo, en términos generales, OAuth no se puede implementar de forma segura en el lado del cliente del navegador (excepto en entornos cerrados seguros como Java o Flash). La implementación del proceso OAuth en Javascript es bastante posible, pero expondrá su token secreto/consumidor. Entonces, cualquiera podría suplantar su aplicación para identificarse con intenciones maliciosas como robar los datos confidenciales de sus usuarios. Si aún desea trabajar con JS, le recomiendo que implemente el proceso seguro (autenticación y almacenamiento de token final) en el servidor utilizando Node.js

Cuestiones relacionadas