2008-12-09 12 views
8

Estoy construyendo una aplicación de iPhone que se comunica con un backend de Ruby on Rails. La aplicación Ruby on Rails también servirá a los usuarios de la web. El complemento restful_authentication es una excelente manera de proporcionar autenticación de usuario rápida y personalizable. Sin embargo, me gustaría que los usuarios de la aplicación iPhone tengan una cuenta creada automáticamente por el identificador único del teléfono ([[UIDevice device] uniqueIdentifier]) almacenado en una nueva columna. Más tarde, cuando los usuarios estén listos para crear un nombre de usuario/contraseña, la cuenta se actualizará para contener el nombre de usuario y la contraseña, dejando intacto el identificador único del iPhone. Los usuarios no deberían poder acceder al sitio web hasta que hayan configurado su nombre de usuario/contraseña. Sin embargo, pueden usar la aplicación iPhone, ya que la aplicación puede autenticarse utilizando su identificador.¿Cuál es la mejor manera de extender restful_authentication/AuthLogic para admitir inicios de sesión perezosos mediante un iPhone anónimo?

¿Cuál es la mejor manera de modificar restful_authentication para hacer esto? Crear un plugin? ¿O modificar el código generado?

¿Qué pasa con los marcos alternativos, como AuthLogic. ¿Cuál es la mejor manera de permitir que los iPhones obtengan un token de autenticación generado bloqueado en su UUID, pero luego deje que el usuario cree un nombre de usuario/contraseña más adelante?

+0

No es realmente una respuesta, pero algo más que pensar: ¿cómo puede su diseño para manejar el caso en que alguien tiene una cuenta iPhone, registra una cuenta de usuario/contraseña en la página web de forma independiente, y luego quiere fusionar las dos cuentas? – Stobor

+0

he hecho pensar un poco más en este problema, y ​​aunque todavía tengo que llegar a una solución que me satisface, he intentado un par de cosas. crear un usuario anónimo al azar con un nombre de usuario/contraseña vinculada a un objeto de dispositivo funciona un poco. Sin embargo, esto requiere que el dispositivo obtenga el nombre de usuario/contraseña al momento de la creación y lo almacene. El problema con esta solución es que el sitio está lleno de contribuciones de cuenta anónimas (fácilmente corregibles al tener un campo de tipo de cuenta en Usuario llamado Anónimo, que luego puede filtrar si es necesario). Esta solución funciona, pero no es genial. –

Respuesta

6

Creo que no debe usar el identificador del teléfono solo para autenticar, ya que no es un secreto y probablemente también adivinable/predecible. No olvide que si alguien quiere piratear su aplicación web, no tiene que usar su código; puede adivinar los ID de los dispositivos y tratar de meterse con los datos de los usuarios con cualquier cliente web.

Debe tratar la ID del dispositivo de forma similar a un nombre de usuario: es para identificación y no autenticación. Le sugiero que haga que el usuario elija una contraseña, o incluso mejor genere un código aleatorio automáticamente, para luego enviar la ID del dispositivo + esta contraseña/código para registrar el dispositivo primero y luego para autenticar el dispositivo.

También puede apostar que algunos usuarios tendrán más de un dispositivo, o reemplazarán uno eventualmente, o obtendrán a alguien como Stephen Fry que anda con 4 iphones. Para tratar con esto, le sugiero que busque una forma de instanciar restful_authentication dos veces, una para autenticar usuarios y una segunda vez para autenticar dispositivos. No he usado este complemento pero espero que solo necesites usar diferentes parámetros de tabla para que esto suceda. Luego, en la lógica de su aplicación, permita que los usuarios asocien más de un dispositivo con su cuenta.

Para hacerlo de forma segura, ya sea hacerlo desde el dispositivo, o que el dispositivo muestre un código aleatorio que luego entran en la aplicación web para demostrar que poseen el dispositivo (esto suena más doloroso de lo que es - que es el mismo procese el uso de Apple en iTunes, Apple TV y la aplicación remota; observe cómo lo hacen, de modo que no sorprenderá a los usuarios).

(También asegúrese de que al generar contraseñas aleatorias use un generador de números aleatorios criptográficos como base, probablemente haya una API de iPhone para esto, de lo contrario, sus contraseñas pueden ser predecibles).

+0

Gracias Franks. Eso es todo un gran consejo sobre un esquema de seguridad para autorizar dispositivos. No acaba de responder mi pregunta sobre una técnica para modificar restful_authentication. ¡Creo que traes algunos puntos excelentes! –

+0

así realmente estoy sugiriendo que no modifique restful_authentication - replantear su esquema de esta manera puede utilizar dos instancias diferentes de la misma - una para autenticar dispositivos y otra para identificar a los usuarios. Más lógica de aplicación para permitir el enlace de dispositivos N a un usuario. – frankodwyer

+0

¿Tiene alguna sugerencia sobre cómo hacer eso? –

0

¿Ha intentado utilizar otro esquema de autenticación como Authlogic? He encontrado restful_authentication bastante intrusivo (aunque hice trampa usando bort).

+0

Sí, restful_authentication parece bastante intrusivo. Voy a echar un vistazo a Authlogic, aunque, yo he llegado con una alternativa temporal modificando restful_authentication directamente (pero esto no significa futuras actualizaciones prueba de ello). –

0

Generar contraseña aleatoria en Rails link text estoy usando restful_authentication plug-in para uno de mis proyectos. Como parte de mi flujo de trabajo de creación de usuarios, el sistema debe generar una contraseña aleatoria para el nuevo usuario.

0

¿Qué opinas sobre el uso del UDID y una contraseña aleatoria generada mediante el UDID + una sal en todo el sitio definido?

Algo así como:

salt = 'afG553Dvbf3' 

udid = '1234567890' 
pass = Digest::MD5.hexdigest(udid + salt) 

y enviar esa contraseña para el iPhone para la próxima vez que se conecte.

Cuestiones relacionadas