Se connecter à l'aide de jetons d'ID

<ph type="x-smartling-placeholder">

Après avoir récupéré les identifiants de l'utilisateur, ou des indices de connexion récupérés, vous pouvez vérifier si un jeton d'ID est disponible pour l'identifiant. Un jeton d'ID est un assertion de l'identité d'un utilisateur contenant également son profil de base des informations, y compris une adresse e-mail validée par Google Lorsque des jetons d'ID sont disponibles, vous pouvez les utiliser pour s'authentifier auprès du backend de votre application ou ignorer l'étape de validation de l'adresse e-mail lorsque vous créez un compte.

Un jeton d'ID est disponible lorsque l'ID utilisateur d'un objet Credential correspond à l'utilisateur ID d'un compte Google connecté à l'appareil.

Pour vous connecter avec un jeton d'ID, récupérez d'abord le jeton d'ID avec l'getIdTokens . Envoyez ensuite le jeton d'ID au backend de votre application. Sur le backend, vérifiez le jeton à l'aide d'une bibliothèque cliente des API Google ou d'un jeton JWT à usage général bibliothèque.

Avant de commencer

Obtenir un jeton d'ID à partir de l'objet Credentials

Après avoir récupéré les identifiants d'un utilisateur, vérifiez si l'objet Credentials inclut un jeton d'ID. Si c'est le cas, appelez getIdTokens pour le récupérer et l'envoyer à votre backend par le biais d'une requête 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);
    }
}

Vérifier le jeton d'ID sur le backend

Après avoir reçu le jeton d'ID par la méthode HTTPS POST, vous devez vérifier signature et valider les revendications aud, iss et exp du jeton.

La revendication aud d'un jeton d'identification de Smart Lock pour les mots de passe comporte les éléments suivants : format:

android://SHA512_HASH@ANDROID_PACKAGE_NAME

La valeur SHA512HASH est le hachage SHA-512 de votre signature certificat. Vous pouvez obtenir cette valeur à l'aide des utilitaires keytool et openssl:

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

Vous pouvez également obtenir le hachage SHA-512 en examinant un jeton d'ID dont vous savez qu'il est valide.

Les bibliothèques JWT peuvent gérer certaines de ces tâches de validation à votre place. Par exemple : à l'aide de la bibliothèque cliente des API Google pour 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.");
}

Consultez la documentation Google Sign-In. pour en savoir plus.