2012-10-05 36 views
8

Estoy desarrollando una aplicación para Android que utiliza la cuenta de google disponible en el dispositivo para autenticar al usuario al componente del lado del servidor.Android: verificar el nombre de la cuenta de google del dispositivo en el servidor

Envío el nombre de la cuenta de google (dirección de gmail) al servidor, pero para poder verificarlo con google en el servidor, solicito un token oauth en el dispositivo Android y también lo envío al servidor.

El problema es que, aunque no necesito acceder a la información de usuario adicional, tengo que usar el ámbito de correo electrónico oauth que abre un cuadro de diálogo de confirmación. No me gusta este diálogo porque voy a verificar que el nombre de la cuenta no acceda a la información del usuario.

También hay AccountManager.getPassword(account) pero no me gusta comunicarme ni utilizar la contraseña de usuario.

También es posible usar WebView y autenticar al usuario como una aplicación web (usando OpenId por ejemplo) pero no parece una solución óptima en un dispositivo.

¿Hay alguna otra forma mejor de verificar el nombre de la cuenta del dispositivo en el servidor?

+0

no creo que es posible verificar el nombre accout usuario sin inicio de sesión (nombre de cuenta + pase). En ninguna manera está utilizando OAuth (primer inicio de sesión de tiempo), o entrada directa - que tienen que utilizar par (entrada + pase). Tengo una respuesta más reciente de cualquier servicio de autenticación, como una contraseña incorrecta para el inicio de sesión "xxx". –

+0

Este artículo podría ser útil: http://android-developers.blogspot.com.es/2013/01/verifying-back-end-calls-from-android.html?m=1 – mjn

+0

@mjn Gracias, eso es lo que ¡estaba buscando! Siéntete libre de agregarlo como respuesta para que yo pueda aceptarlo. –

Respuesta

1

en este artículo se da una detallada - wi código fuente º - Descripción del proceso de verificación:

Verifying Back-End Calls from Android Apps por Tim Bray

versión corta: Utilice la clase GoogleAuthUtil, disponible a través de servicios de Google Play, para recuperar una cadena llama un “Identificación de emergencia” . Usted envía el token a su extremo posterior y su extremo posterior se puede utilizar para forma rápida y barata verificar la aplicación que envía y que estaba usando la aplicación .

Con la información en este artículo me fue fácil implementar el cliente y el servidor de Android y el código JavaEE.

2

No es posible verificar cuentas de Google sin un token válido. Es posible que desee consultar la documentación oficial de Android a continuación.

http://developer.android.com/training/id-auth/index.html

+0

No seas demasiado dogmático, ¿es imposible iniciar sesión con una contraseña? :)) –

+0

Lo siento, no quise decir eso. La autorización de la cuenta de Google en el lado del servidor requiere un token oauth válido. –

3

Uso AccountManager o servicios de Google Play para obtener un token de OAuth2 para el perfil de usuario (alcance: https://www.googleapis.com/auth/userinfo.profile). Luego, verifíquelo usando el endpoint de Google (https://accounts.google.com/o/oauth2/tokeninfo) y, opcionalmente, obtenga información del usuario. Aquí se proporciona una aplicación de ejemplo: http://oauthssodemo.appspot.com. Parece que estás haciendo algo similar, y si es así, esta es la forma correcta (o al menos recomendada) de hacerlo. Por cierto, no puede obtener la contraseña del usuario porque no está firmado con el mismo certificado que el proveedor de la cuenta.

La única otra forma (confiable) de hacerlo es enviar al usuario un correo electrónico a su dirección de GMail con un token aleatorio y hacer que lo ingresen en la aplicación. Esto le permite verificar que tengan acceso al correo electrónico, por lo que debe ser suyo (a menos que, por supuesto, hayan robado el dispositivo de otra persona).

O simplemente puede confiar en que si el usuario tiene la cuenta registrada en su dispositivo, es realmente su cuenta, ya que se autenticaron al menos una vez cuando se activa el dispositivo. Luego solo usa la dirección de Gmail tal como está, lo que puede o no ser suficiente para tu aplicación.

+0

gracias, ya estoy haciendo lo que está aconsejando (como también lo ha aconsejado en otra respuesta). El problema es que es posible llamar a la API del lado del servidor desde cualquier lugar y tengo que verificar las reclamaciones de la cuenta antes de aceptarlas. También es posible usar GCM para verificar cada dispositivo, pero luego un dispositivo rooteado puede falsificar una cuenta. –

+0

Verificación de un token real es la única cosa confiable entonces (que yo sepa). –

1

Yo sugeriría esto:

  • El dispositivo

    1. Seleccione una cuenta (obtener la dirección de correo electrónico)

    2. Solicitar una token de OAuth

  • Envíe el correo electrónico + contadores al servidor

  • En el servidor

    1. API de uso Google para recuperar información de usuario básica del token

    2. Compara la dirección de correo electrónico devuelto por Google con la recibida

+0

Por favor, lea mi pregunta, ya estoy haciendo esto. –

+0

Lo que pide no es posible, y este debería ser el camino a seguir. – shkschneider

Cuestiones relacionadas