Token no es de un proveedor compatible de esta agrupación de identidades.

Cuando hago clic en Inicio de sesión de Google, estoy recibiendo Token en el método onActivityResult utilizando el siguiente código:

GoogleSignInAccount account = result.getSignInAccount(); String token = account.getIdToken(); credentialsProvider = new CognitoCachingCredentialsProvider( Login.this, // Context "My Pool ID", // Identity Pool ID Regions.US_EAST_1 // Region ); 

He añadido el ID de cliente de Google en Cognito mediante la administración de identidades federadas. He cruzado todas las claves en IAM accounts.google.com, todo parece ser perfecto.

  final Map<String, String> logins = new HashMap<String, String>(); logins.put("accounts.google.com", account.getIdToken()); credentialsProvider.setLogins(logins); credentialsProvider.refresh(); 

Cuando intento conseguir el identificador de identidad usando el código abajo estoy consiguiendo el error – Token no es de un abastecedor apoyado de esta piscina de la identidad. ¿Cuál podría ser el error?

  credentialsProvider.getIdentityId(); 

En mi caso, tuve una barra inclinada en mi proveedor de identidad de IAM para accounts.google.com, así:

Lista de proveedores IAM

El que tiene la barra inclinada está equivocado; El uno sin la barra inclinada funciona correctamente. Es interesante que AWS obtenga la misma huella digital para ambos.

En la consola AWS IAM en Cuentas> Proveedores> accounts.google.com, añada la clave para "Cliente de Android para com.example.yourstuff (creado automáticamente por Google Service)" como audiencia. Parece algo como "222222222222-x8x8x8x8x8x8x8x8x8x8x8x8x8x8x8x8.apps.googleusercontent.com" (A continuación, cuando esté depurando, siga adelante y todo el resto de las claves como entradas de audiencia, puede volver más tarde y averiguar cuáles puede quitar .)

En la llamada a GoogleSignInOptions.Builder , necesita una llamada a #requestIdToken utilizando su clave de aplicación Web en los ID de cliente de OAuath 2.0 en la API de Goole> Página de API Manager> Credentials:

 GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken("999999whateverxxxx.apps.googleusercontent.com") .build() 

(El token se puede poner en caché, si ejecuta la aplicación con la llamada requestIdToken y, a continuación, elimina la llamada requestIdToken y ejecuta de nuevo, puedes obtener un resultado de una llamada a getIdToken () en el objeto GoogleSignInAccount).

El código de inicio de sesión de Google finalmente le dará un objeto GoogleSignInAccount . Llame #getIdToken en ese objeto para obtener una cadena (en mi caso, es de 83 caracteres) que va a poner en el hash de inicio de sesión:

  // pseudocode... private fun fn(x: GoogleSignInAccount) { val token = x.idToken // getIdToken if you're still using Java val logins = HashMap<String, String>() logins.put("accounts.google.com", token); credentialsProvider.logins = logins ... 

Si no tiene la clave correcta listada en IAM> Proveedores> accounts.google.com, obtendrá una NotAuthorizedException(Invalid login token. Incorrect token audience.) .

Si agregaste esa barra adicional a accounts.google.com/, obtendrás una NotAuthorizedException(Token is not from a supported provider of this identity pool.)

Si intenta agregar accounts.google.com/ al hash de inicio de sesión como este (no lo haga, corrija el nombre del proveedor de identidad de IAM):

 logins.put("accounts.google.com/", token); 

Obtendrá una NotAuthorizedException(Invalid login token. Issuer doesn't match providerName) .

Si utiliza el token incorrecto, obtendrá una NotAuthorizedException (Invalid login token. Token signature invalid.) .

(Sospecho que hay muchas otras maneras de fallar, éstas son sólo las que he encontrado.)

Debe agregar el ID de la aplicación de Google Provider en su configuración de backend con Cognito para que funcione correctamente. Puede hacerlo desde Cognito Console o Mobile Hub Console con su identificador de grupo.

Gracias, Rohan

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.