Tuvimos unos requisitos similares sobre el último proyecto: backend GAE con GWT frontend y Android/clientes de iPhone. Además, no queríamos almacenar credenciales de usuario.
Así que optamos por utilizar OpenID, que desafortunadamente es un estándar web y no funciona bien con dispositivos móviles, pero es factible.
En el lado GAE simplemente habilitamos el inicio de sesión federado que nos dio OpenID.
En los dispositivos móviles, cuando el usuario necesita iniciar sesión, le presentamos una lista de los autenticadores OpenID (Google, Yahoo, etc.). Luego, abrimos un navegador nativo (no el navegador integrado) y enviamos al usuario al sitio de autenticación de OpenID elegido. La ventaja es que el navegador del usuario generalmente ya tiene el nombre de usuario/contraseña recordado, por lo que este paso solo requiere que el usuario presione un botón.
Todo esto es bastante sencillo. Ahora aquí está la parte difícil: Después de que el usuario confirma el inicio de sesión, OpenID redirecciona a nuestra URL de devolución de GAE (debe proporcionar esta url cuando se solicite). En esta url creamos una URL personalizada, por ejemplo:
yourappname://usrname#XXXYYYZZZ
donde XXXYYYZZZZ es token de autenticación. Obtenemos este token de la página de devolución donde se almacena como una cookie de ACSID: usamos algunos JSP para leer esta cookie y envolverla en la URL personalizada anterior.
Luego registramos nuestras aplicaciones de Android y iPhone para manejar las URL yourappname://
, de modo que cuando el usuario hace clic en este enlace, nuestra aplicación se invoca y el enlace se le pasa. Extraemos el nombre de usuario y el token de este enlace y lo usamos en solicitudes de REST para el back-end de GAE.
Si tiene más preguntas, me gustaría actualizar esta publicación.
Actualización:
La cookie de sesión de usuario en AppEngine producción se llama ACSID
, mientras que el servidor de desarrollo de App Engine es llamado dev_appserver_login
.
+1 - ¡muy detallado! ¿Qué muestra el texto URL personalizado? "Haga clic aquí para volver a la aplicación"? ¿O algo así? –
Puede mostrar lo que quieras. Utilicé el enlace "Continuar ..." que parece un botón. Con algunos javascript, posiblemente podría iniciar la aplicación automáticamente, sin requerir que el usuario haga clic en el enlace, no lo intentó, necesitaría ser probado. –