tutorial studio google example developer android access-token

google - oauth 2.0 android studio



GoogleAuthUtil.getToken devuelve un código de autenticación no válido (3)

Como puede ver en Validar la documentación del token :

googleapis.com/oauth2/v1/tokeninfo

Acepta un token de acceso y devuelve información sobre ese token de acceso, incluida la aplicación a la que se emitió, el destino deseado del token, los ámbitos a los que el usuario accedió, la vida útil restante del token y la ID de usuario.

A continuación se muestra un ejemplo de dicha solicitud:

https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=1/fFBGRNJru1FQd44AzqT3Zg

El punto final de TokenInfo responderá con una matriz JSON que describe el token o un error.

En el cable, la respuesta es similar a la siguiente:

{ "audience":"8819981768.apps.googleusercontent.com", "user_id":"123456789", "scope":"profile email", "expires_in":436 }

Si el token ha caducado, ha sido manipulado o se han revocado los permisos, el servidor de autorización de Google responderá con un error. El error aparece como un código de estado 400 y un cuerpo JSON de la siguiente manera:

{"error":"invalid_token"}

Por diseño, no se proporciona información adicional sobre el motivo del fallo.

Así que invalid_token es una respuesta válida cuando el token ha caducado, ha sido manipulado o se han revocado los permisos.

EDITAR

Es posible recibir invalid_token justo después de que invalid_token el token porque GoogleAuthUtil puede haberlo almacenado en caché. En este caso, debe llamar a GoogleAuthUtil.invalidateToken .

Puede encontrar más información aquí: http://developer.android.com/reference/com/google/android/gms/auth/GoogleAuthUtil.html

Editar 2

Acabo de notar que le falta https://www.googleapis.com/auth/plus.login en su alcance. Por favor, intente agregarlo porque parece obligatorio usar Identidad de cliente cruzado.

Uso lo siguiente para obtener una autenticación a la que puedo acceder desde un backend desde una aplicación de Android. Esto se describe aquí https://developers.google.com/identity/protocols/CrossClientAuth .

StringBuffer sb = new StringBuffer(); sb.append("oauth2:server:client_id:"); sb.append(getString(R.string.google_app_id)); sb.append(":api_scope:"); sb.append("profile email"); final String scope = sb.toString(); String token = GoogleAuthUtil.getToken(Activity.this, mAuthAccount, scope);

(mAuthAccount se configuró previamente con AccountPicker.newChooseAccountIntent).

Lo anterior devuelve un código de autenticación de corta duración que a veces ha caducado. Me gustaría compararlo con los servidores de Google, pero llamar a https://www.googleapis.com/oauth2/v1/tokeninfo?access_token= con la cadena de token devuelta por GoogleAuthUtil.getToken devuelve "token no válido".

¿Cómo verifico que el código de autenticación no haya caducado antes de intentar usarlo?

Edición: la cadena devuelta no es un token, sino un código de autorización que puede intercambiarse con una API de Google para obtener un token (la cadena devuelta comienza con "/ 4" y no "/ 1" o "/ 2" si recuerdo correctamente).

El código no siempre funciona (en mi servidor) y me encantaría poder verificar si el código puede usarse o si ha caducado.


El token recuperado por GoogleAuthUtil.getToken() de esta manera no es un token de acceso, es un token de ID.

Pruebe la siguiente URL en su lugar (tenga en id_token parámetro de consulta id_token lugar de access_token ):

https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=<ID TOKEN>