En Google App Engine, ¿puedo relacionar un token de Google OAuth 2 y un token SACSID que obtuve usando AccountManager de Android?

Estoy escribiendo una aplicación de Google App Engine junto con un cliente CLI, un cliente Android y un cliente Javascript. El propósito de esta aplicación es permitir que uno controle un teléfono Android en el que está instalado el cliente Android, ya sea usando la CLI o el cliente Javascript.

a autenticación desempeña un papel crucial, ya que un error puede permitir que un usuario malintencionado controle los teléfonos de otros.

El cliente de Android está escrito y funciona. Se autentica al usuario usandoeste métod. Básicamente, esto me da el llamado token SACSID que puedo almacenar en una cookie. Cuando se configura esta cookie, App Engine reconoce a mi usuario. La aplicación del servidor puede llamar al UserService para obtener un Usuario para llamar a getUserId (). getUserId () me devuelve una cadena opaca que identifica a mi usuario. Hasta aquí todo bien

Ahora estoy escribiendo los clientes JS y CLI. Debido a que el cliente CLI no tiene una forma confiable de mostrar un CAPTCHA o abrir un navegador, supongo que necesita usar el API del dispositivo ("Inicio de sesión del cliente" no es una opción). Esta API requiere el uso de OAuth 2 para la autenticación. Además, quiero que el cliente JS acceda a los contactos del usuario, lo que también parece indicar que OAuth 2 sería adecuado.

Si mi usuario se autentica con OAuth 2, ¿podré transformar de alguna manera este token de Google OAuth 2 en la misma cadena opaca que obtengo cuando se conecta el cliente de Android? Si no, ¿puedo modificar mi aplicación de Android para que use OAuth en lugar de un token de Sacsid?

Para ser más específico, veo tres cosas que resolverían mi problema:

Una forma de obtener un token OAuth 2 del administrador de la cuentaUna forma de intercambiar el token OAuth 2 por un token SACSIDUna forma de obtener el mismo ID de usuario opaco tanto con el token SACSID como con el OAuth2, pero solo si puedo tener ambos sistemas de autenticación en la misma aplicación.

Algo que parece similar a la tercera solución posible es obtener la dirección de correo electrónico del usuario tanto de OAuth como del token SACSID, y usarla como ID de usuario. Sin embargo, esto me parece un poco torpe:

Cada vez que reciba una solicitud de OAuth 2, necesitaría llamar a las API de Google para recuperar la dirección de correo electrónico del usuario (o construir mi propio sistema de tokens que parece inseguro e introduce muchas otras dificultades).a dirección de correo electrónico de un usuario determinado puede cambiar, haciéndome perder la asociación entre el usuario y sus datos anteriores.

Respuestas a la pregunta(2)

Su respuesta a la pregunta