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
- Votre application doit pouvoir récupérer les identifiants de l'utilisateur. ou récupérer un indice de connexion.
- Vous devez appeler
setAccountTypes(IdentityProviders.GOOGLE)
lorsque vous créez le ObjetsCredentialRequest
etHintRequest
.
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.