2010-03-12 18 views
9

Digamos que tengo un sitio web que tiene mucha información sobre nuestros productos. Me gustaría que algunos de nuestros clientes (¡incluyéndonos a nosotros!) Puedan buscar nuestros productos por varios métodos, incluyendo:¿Mejores prácticas para API seguras?

1) Extracción de datos de llamadas AJAX que devuelven datos en genial, JavaScripty-ways 2) Crear aplicaciones de iPhone que usen esa información; 3) Tener otras aplicaciones web que usen esa información para su propio fin.

Normalmente, solo crearía una API y terminaré con ella. Sin embargo, estos datos son, de hecho, levemente confidenciales, lo que quiere decir que no queremos que nuestros competidores puedan buscar todos nuestros productos todas las mañanas y luego establecer automáticamente sus precios para socavarnos. Y también queremos ser capaces de ver quién podría estar abusando del sistema, de modo que si alguien realiza diez millones de llamadas complejas a nuestra API al día y empantana nuestro servidor, podemos cortarlas.

Mi siguiente paso lógico sería crear una clave de desarrollador para restringir el acceso, lo que funcionaría bien para las aplicaciones web, pero no tanto para las llamadas AJAX. (A mi modo de ver, tendrían que proporcionar la clave en el JavaScript, que está en texto plano y se ve fácilmente, y por lo tanto, en realidad no hay seguridad en absoluto. Particularmente, si usáramos las claves de nuestros propios desarrolladores en nuestro sitio. para hacer estas llamadas AJAX.)

Así que mi pregunta: después de mirar a Oauth y OpenID durante algún tiempo, no estoy seguro de que exista una solución que pueda manejar las tres anteriores. ¿Hay algún tipo de "mejores prácticas" canónicas para las claves de los desarrolladores, o Oauth y OpenID pueden manejar fácilmente las llamadas AJAX de alguna manera que todavía tengo que asimilar, o me falta algo por completo?

Respuesta

4

Creo que OAuth de 2 patas es lo que desea satisfacer # 2 y # 3. Para el n. ° 1, sugeriría que, en lugar de que el cliente haga solicitudes JS directamente en contra de su aplicación, en su lugar podrían proxy esas solicitudes a través de su propia aplicación web.

+0

Pero, ¿cómo puede asegurarse este servidor proxy API para evitar que el atacante abuse de él? – Constantin

1

Una solución intermedia requiere una clave API; y luego exigir que quienquiera que lo use en realidad no lo use directamente con AJAX; pero envolver sus llamadas en una solicitud del lado del servidor, por ejemplo:

AJAX -> customer server -> your server -> customer server -> user 

Creación de un simple PHP API para que las partes interesadas no debería ser demasiado difícil, y sus propias aplicaciones para iPhone, obviamente, cortar el centro al hombre, con el envío su propia clave API.

+0

Debe haber una forma de hacerlo: ¿no es esto lo que Google Analytics hace al permitirle pegar un poco de JS directamente en su página y de alguna manera hacer esa llamada de API segura? Me pregunto cómo lo hacen. –

1

Es poco probable que OAuth y OpenID tengan mucho que ver directamente con las llamadas AJAX. Lo más probable es que tenga algún tipo de filtro de autorización frente a su controlador AJAX que verifique una cookie, y tal vez esa cookie se establezca como resultado de una autenticación OpenID.

Parece que se trata de una cuestión de "how do I prevent screen scraping". Si solo los clientes que inician sesión pueden ver los precios, eso es una cosa, pero suponiendo que usted es como la mayoría de los sitios de venta minorista y su barrera para el registro de clientes es lo más baja posible, eso realmente no ayuda.

Y, oye, si sus precios no están disponibles en, no aparece en los motores de búsqueda como Froogle o Nextag o PriceGrabber. Pero eso es más una decisión de estrategia de negocios, no de programación.