Dopo aver recuperato le credenziali di un utente. o suggerimenti di accesso recuperati, puoi verificare se è disponibile un token ID per la credenziale. Un token ID è un asserzione firmata dell'identità di un utente che contiene anche il profilo di base dell'utente informazioni, incluso un indirizzo email verificato in tutti i canali Google. Quando sono disponibili token ID, puoi utilizzarli per garantire in modo sicuro autenticarsi con il backend dell'app o saltare il passaggio della verifica email quando crei un nuovo account.
Un token ID è disponibile quando l'ID utente di un oggetto Credential
corrisponde all'utente
L'ID di un Account Google a cui è stato eseguito l'accesso sul dispositivo.
Per accedere con un token ID, devi prima recuperarlo con getIdTokens
. Invia quindi il token ID al backend dell'app. Nel backend, verifica
il token utilizzando una libreria client API di Google o un JWT per uso generico
libreria.
Prima di iniziare
- L'app deve essere in grado di recuperare le credenziali di un utente. oppure recupera un suggerimento di accesso.
- Devi chiamare
setAccountTypes(IdentityProviders.GOOGLE)
quando creiCredentialRequest
eHintRequest
oggetti.
Recuperare un token ID dall'oggetto Credentials
Dopo aver recuperato le credenziali di un utente, controlla se l'oggetto Credentials
include un token ID. In caso affermativo, chiama getIdTokens
per recuperarlo e inviarlo
al backend tramite 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);
}
}
Verifica il token ID sul backend
Dopo aver ricevuto il token ID tramite HTTPS POST, devi verificare
e verificare le rivendicazioni aud
, iss
e exp
del token.
La richiesta aud
di un token ID di Smart Lock per password presenta quanto segue
formato:
android://SHA512_HASH@ANDROID_PACKAGE_NAME
Il valore SHA512HASH è l'hash SHA-512 della firma
certificato. Puoi ottenere questo valore utilizzando le utilità keytool
e openssl
:
keytool -exportcert -keystore path-to-keystore -alias key-name
'
| openssl sha -sha512 -binary
| base64 -w 0
| tr '+/' '-
In alternativa, puoi ottenere l'hash SHA-512 esaminando un token ID che sai essere valido.
Le librerie JWT possono gestire alcune di queste attività di verifica per te. Ad esempio: utilizzando la libreria client API di Google per 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.");
}
Consulta la documentazione relativa ad Accedi con Google per ulteriori dettagli.