2012-02-29 26 views
6

Estoy tratando de agregar una interfaz REST a Django para un cliente móvil. El cliente móvil usará JSON a través de HTTPS. No he podido encontrar la "mejor" forma de lograr esto para dispositivos móviles. Desde la búsqueda, parece que # 2 es más favorable para # 1:¿Cómo asegurar una API REST para aplicaciones móviles?

  1. Utilice la autenticación HTTP y establezca una sesión basada en cookies. Todas las transacciones se realizarán a través de HTTP y los mensajes JSON solo contendrán comandos o datos.
  2. Pase el nombre de usuario y la contraseña (encriptados) dentro de cada mensaje JSON para todas las transacciones y no confíe en las sesiones basadas en cookies.

Respuesta

1

Es preferible el número 2, y en lugar de tirar el suyo, recomendaría usar la autenticación OAuth si es posible. Tanto las bibliotecas del cliente como del servidor están disponibles ahora para su uso en la mayoría de las plataformas. Compruebe http://oauth.net para más detalles.

+0

¿Algún enlace a documentos de diseño/patrones sobre este tema? – QED

+0

Definitivamente comenzaría con la sección "Comenzar" del sitio web de Oath.net mencionado anteriormente. Tiene enlaces a gran parte de la información de OAuth disponible hoy. –

+0

Vaya, me refería a REST – QED

3

OAuth es exagerado a menos que desee poner estos servicios a disposición de otros desarrolladores (a los que accederían en nombre de sus usuarios finales). Es mejor ir con la opción 2, pero recomendaría utilizar Autenticación implícita en lugar de Autenticación de contraseña. Combina eso con SSL y definitivamente eres bueno para ir.

0

Siempre y cuando esté usando encriptación real y no base64 o algún algoritmo de ofuscación local, el # 2 está bien y es excelente. También podría considerar la ruta que toman muchas compañías, que vincula una clave API a un nombre de usuario.

+0

¿Todavía es necesario el cifrado si todo se enviará en SSL? – ewhitt

+0

SSL es cifrado. Es solo el cifrado en una capa diferente de la pila de comunicación: SSL cifra todo el canal de comunicación en lugar de solo los contenidos seleccionados de un mensaje en particular. Por lo tanto, generalmente es más caro. Hacer ambas cosas puede ser un desperdicio de recursos. – QED

8

Recomendaría enviar el nombre de usuario/contraseña primero con una llamada de inicio de sesión. El JSON devolverá un authToken o accessToken que el dispositivo móvil enviará para todas las llamadas posteriores. Luego verificará para asegurarse de que authToken sea válido. Este es el enfoque que toman muchas API. En su base de datos, vincularán la clave API con la cuenta de usuario con la que iniciaron sesión.

+0

Gracias. Me gusta este enfoque. ¿Este tipo de truncamiento tiene un nombre o algo que podría buscar más por casualidad? – ewhitt

+0

@ewhitt se considera autenticación basada en token http://upcoming.yahoo.com/services/api/token_auth.php – Bot