¿Cómo hacer que AccountManager (authtoken) y OpenID trabajen juntos (sin AppEngine)?

Estoy haciendo una aplicación de Android que debería ser capaz de obtener datos de un servicio web (que no es parte de GAE). Los usuarios pueden iniciar sesión en el servicio web a través de su navegador mediante OpenId (solo se permiten las cuentas de Google).

AccountManager puede darme authtoken. Podría guardar este authtoken en mi servidor, junto con el nombre de usuario google account (correo electrónico) y luego usar este nombre de cuenta para conectar su login openid con el registro de la aplicación.

Pero esto no soluciona nada porque no tengo forma de verificar este token contra la información OpenID del usuario … ¿O no? Pensé que podría usar authtoken del usuario para "de alguna manera" vincular su cuenta de android a la cuenta de la tela.

Esto se parece cada vez más a una forma incorrecta de manejar esto, pero no quiero guardar los usuarios de nombre de usuario / contraseña de Google en SharedPreferences y utilizar estos datos para iniciar sesión.

¿Ideas creativas? Gracias

He resuelto este problema exacto para mi aplicación Push Actions – http://www.pushactions.com . Para mi solución, terminé utilizando GAE, pero sólo para autenticar el token. La aplicación real Push Actions está alojada en Heroku. Aquí está mi flujo:

  1. La aplicación de Android genera un token GAE y luego publica el token y la dirección de correo electrónico de la cuenta en Push Actions en Heroku
  2. Push Actions publica el token en mi servicio que se ejecuta en GAE
  3. El servicio GAE toma el token, determina si es válido y devuelve la dirección de correo electrónico válida para
  4. Push Actions compara la dirección de correo electrónico devuelta por GAE con la dirección de correo electrónico de la aplicación android, si coinciden, el token es válido para esa dirección de correo electrónico. Esto significa que el token puede asociarse de forma segura con la dirección de correo electrónico openid del usuario de google.

Por lo que sé, esta es la única manera de verificar si un token generado por AccountManager es válido. Es cierto, requiere el uso de GAE, pero sólo para una pequeña parte de su aplicación en general. Mi servicio GAE terminó siendo como una clase y unas pocas líneas de código, por lo que no es mucho. Se puede pensar en la pieza GAE como un servicio proporcionado por google para autenticar fichas.

Aquí está el código para mi servicio GAE:

package com.pushactions; import java.io.IOException; import java.util.logging.Logger; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.google.appengine.api.users.User; import com.google.appengine.api.users.UserService; import com.google.appengine.api.users.UserServiceFactory; @SuppressWarnings("serial") public class PushActionsAuthServlet extends HttpServlet { private static final Logger log = Logger.getLogger(HttpServlet.class.getName()); public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { UserService userService = UserServiceFactory.getUserService(); User user = userService.getCurrentUser(); if (user != null) { req.setAttribute("user", user); try { req.getRequestDispatcher("/logged_in.jsp").forward(req, resp); } catch (ServletException e) { log.severe("Couldn't redirect to logged_in.jsp"); } } else { try { req.getRequestDispatcher("/logged_out.jsp").forward(req, resp); } catch (ServletException e) { log.severe("Couldn't redirect to logged_out.jsp"); } } } } 

logged_in.jsp:

 <%@ page import="com.google.appengine.api.users.User" %> <% User user = (User)request.getAttribute("user"); %> <?xml version="1.0" encoding="UTF-8"?> <result> <status>ok</status> <user_name><%= user.getEmail() %></user_name> </result> 

logged_out.jsp:

 <%@ page import="com.google.appengine.api.users.User" %> <% User user = (User)request.getAttribute("user"); %> <?xml version="1.0" encoding="UTF-8"?> <result> <status>error</status> <message>not logged in</message> </result> 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.