Si el inicio de sesión con One Tap satisface sus necesidades, considere usarlo en su lugar. One Tap tiene una experiencia de usuario actualizada y otras mejoras.

Iniciar sesión con tokens de identificación

Una vez que haya recuperado correctamente las credenciales de un usuario o las sugerencias de inicio de sesión , puede verificar si hay un token de ID disponible para la credencial. Un token de identificación es una afirmación firmada de la identidad de un usuario que también contiene información básica del perfil del usuario, posiblemente incluida una dirección de correo electrónico que Google haya verificado. Cuando los tokens de identificación están disponibles, puede usarlos para autenticarse de manera segura con el backend de su aplicación o para omitir el paso de verificación de correo electrónico al crear una nueva cuenta.

Un token de ID está disponible cuando el ID de usuario de un objeto Credential coincide con el ID de usuario de una cuenta de Google que inició sesión en el dispositivo.

Para getIdTokens sesión con un token de ID, primero recupere el token de ID con el método getIdTokens . Luego, envíe el token de identificación al backend de su aplicación. En el backend, verifique el token con una biblioteca cliente de la API de Google o una biblioteca JWT de uso general.

Antes de que empieces

Obtener un token de identificación del objeto Credentials

Después de recuperar las credenciales de un usuario, verifique si el objeto Credentials incluye un token de identificación. Si es así, llame a getIdTokens para recuperarlo y envíelo a su backend mediante HTTPS POST.

if (!credential.getIdTokens().isEmpty()) {
    String idToken = credential.getIdTokens().get(0).getIdToken();

    HttpClient httpClient = new DefaultHttpClient();
    HttpPost httpPost = new HttpPost("https://yourbackend.example.com/tokensignin");

    try {
        List nameValuePairs = new ArrayList(1);
        nameValuePairs.add(new BasicNameValuePair("idToken", idToken));
        httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        HttpResponse response = httpClient.execute(httpPost);
        int statusCode = response.getStatusLine().getStatusCode();
        final String responseBody = EntityUtils.toString(response.getEntity());
        Log.i(TAG, "Signed in as: " + responseBody);
    }
}

Verifique el token de identificación en el backend

Después de recibir el token de ID por HTTPS POST, debe verificar la firma del token y verificar las declaraciones aud , iss y exp del token.

El reclamo de aud de un token de identificación de Smart Lock para contraseñas tiene el siguiente formato:

android://SHA512_HASH@ANDROID_PACKAGE_NAME

El valor SHA512 HASH es el hash SHA-512 de su certificado de firma. Puede obtener este valor utilizando las utilidades keytool y openssl :

keytool -exportcert -keystore path-to-keystore -alias key-name 
| openssl sha -sha512 -binary
| base64 -w 0
| tr '+/' '-'

O puede obtener el hash SHA-512 examinando un token de identificación que sepa que es válido.

Las bibliotecas JWT pueden manejar algunas de estas tareas de verificación por usted. Por ejemplo, utilizando la biblioteca cliente de la API de Google para Java :

import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken;
import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken.Payload;
import com.google.api.client.googleapis.auth.oauth2.GoogleIdTokenVerifier;

...

// Verifier that checks that the token has the proper issuer and audience,
// and hasn't expired
private static GoogleIdTokenVerifier verifier =
    new GoogleIdTokenVerifier.Builder(transport, jsonFactory)
        .setAudience(Arrays.asList(String.format("android://%s@%s", SHA512_HASH, PACKAGE_NAME)))
        .build();

// (Receive idTokenString by HTTPS POST)

GoogleIdToken idToken = verifier.verify(idTokenString);
if (idToken != null) {
  Payload payload = idToken.getPayload();
  System.out.println("User email: " + payload.getEmail());
  if (payload.getEmailVerified()) {
    System.out.println("Email verified by Google.");
  }
} else {
  System.out.println("Invalid ID token.");
}

Consulte la documentación de inicio de sesión de Google para obtener más detalles.