2010-07-30 22 views
10

Estoy desarrollando una API que usarán los usuarios de mis clientes. Así es como se verá el flujo:Diseño OAuth para API sin permiso de usuarios

  1. El usuario de mi servicio basado en la nube crea una clave API.
  2. El usuario incorpora la clave API en sus propias aplicaciones personalizadas.
  3. El usuario implementa la aplicación en sus propios usuarios finales.
  4. La aplicación se comunica con nuestra API.

Estoy buscando consejos sobre cómo proteger esta API. Veo algunos problemas:

  1. La clave de API debe estar integrada en la aplicación de los usuarios y, por lo tanto, es vulnerable al robo y el abuso.
  2. Una vez que una clave de API se ve comprometida, se puede desactivar fácilmente, pero ¿cómo actualizarán mis usuarios sus aplicaciones para usar una nueva clave de API sin tener que reconstruir la aplicación y volver a desplegarla?

¿Alguien tiene alguna idea sobre cómo diseñar esto?

+1

Su problema 1: la clave de API tiene que incrustarse ... ¿Por qué? ¿Qué idioma/plataforma estás usando? –

+0

La API no se puede abrir de par en par. Estoy recopilando información de la aplicación en nombre de los usuarios de mi sistema. Así que necesito asegurarme de que la información sea legítima y que vaya a la cuenta correcta en nuestro sistema. ¿Tiene sentido? –

+0

Eric, ¿cómo terminaste implementando esto bien? Cada método que se me ocurre para asegurar una API * requiere * alguna forma de clave pública/privada que todos adolezcan de esta vulnerabilidad segura. Estoy pensando específicamente en las aplicaciones de Android que se descargaron/repostaron a principios de este año con malware en ellas.FWIW, Twitter parece resolver este problema emitiendo claves públicas/privadas por * aplicación *, no por cuenta, por lo que si una aplicación se ve comprometida, toda la aplicación se desactiva hasta que se despliegue una nueva versión con nuevas claves. http://dev.twitter.com/pages/auth –

Respuesta

0

Dos soluciones que puedo ver a este, aunque estoy seguro de que hay más ..

  1. método de firma RSA Uso de OAuth, y poner en marcha un intercambio seguro de claves de certificación de la utilización de su "servicio basado en la nube "como el mecanismo de intercambio (o un proveedor de certificado público).

  2. Implemente un servicio que permita a los clientes "renovar" su clave/secreto de consumidor automáticamente, pero luego asegure ese mecanismo usando RSA o algún otro método de encriptación de clave pública.

Ambos no son fáciles, y requerirían las aplicaciones de su usuario para "llamar a casa" para actualizar sus llaves de consumidor.

En el futuro, creo que OAuth 2 proporcionará al menos definiciones de protocolo para este tipo de cosas, pero por ahora, si está utilizando OAuth 1.0a, lo que desea hacer no encaja realmente en la especificación muy bien (es decir, usted mismo tiene que diseñar la mayor parte).

+4

Dado que la aplicación se distribuye a un grupo de usuarios que no son de confianza, ¿no podrían ninguno de ellos descompilar la aplicación y obtener las claves secretas y de consumo para poder abusar del servicio? No puedo encontrar una manera de prevenir ese tipo de abuso. Lo único que se me ocurre es tener la capacidad de bloquear IPs que están abusando del servicio. –

1

Puede que me equivoque, pero tal vez podría hacer que los usuarios de sus clientes hablen con las API de sus clientes. Básicamente, sus clientes mantendrían su clave secreta en sus servidores, y no los incluirían en los clientes que les entregan a sus usuarios, por lo que no podrían ser agregados (a menos que su servidor se viera comprometido por supuesto). Luego, los usuarios hablarían con su API a través de las API de sus clientes.

Sería más lento y necesitaría más trabajo por parte de sus clientes, pero también más seguro.

Cuestiones relacionadas