Nachdem Sie die Anmeldedaten eines Nutzers abgerufen haben oder abgerufene Anmeldehinweise können Sie prüfen, ob für die Anmeldedaten ein ID-Token verfügbar ist. Ein ID-Token ist ein Signierte Bestätigung der Identität eines Nutzers, die auch das grundlegende Profil eines Nutzers enthält Informationen enthalten, möglicherweise eine E-Mail-Adresse, die von Google. Wenn ID-Tokens verfügbar sind, können Sie damit auf sichere Weise Authentifizieren Sie sich beim Backend Ihrer Anwendung oder überspringen Sie den Schritt zur E-Mail-Bestätigung. wenn Sie ein neues Konto erstellen.
Ein ID-Token ist verfügbar, wenn die Nutzer-ID eines Credential
-Objekts mit dem Nutzer übereinstimmt
ID eines Google-Kontos, das auf dem Gerät angemeldet ist.
Rufen Sie für die Anmeldung mit einem ID-Token zuerst das ID-Token mit der getIdTokens
ab
. Senden Sie dann das ID-Token an das Back-End Ihrer App. Prüfen Sie im Back-End,
Das Token mit einer Google API-Clientbibliothek oder einem allgemeinen JWT
Bibliothek.
Hinweis
- Ihre App muss in der Lage sein, die Anmeldedaten eines Nutzers abzurufen. oder einen Anmeldehinweis abrufen.
- Sie müssen
setAccountTypes(IdentityProviders.GOOGLE)
aufrufen, wenn Sie dieCredentialRequest
- undHintRequest
-Objekte.
ID-Token aus dem Objekt „Anmeldedaten“ abrufen
Prüfen Sie nach dem Abrufen der Anmeldedaten eines Nutzers, ob das Credentials
-Objekt
enthält ein ID-Token. Ist dies der Fall, rufen Sie getIdTokens
auf, um sie abzurufen, und senden Sie sie
per HTTPS POST an Ihr Back-End senden.
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);
}
}
ID-Token im Back-End überprüfen
Nachdem Sie das ID-Token per HTTPS POST erhalten haben, müssen Sie die
Signatur und überprüfen Sie die aud
-, iss
- und exp
-Anforderungen des Tokens.
Die aud
-Anforderung eines ID-Tokens von Smart Lock für Passwörter enthält Folgendes:
Format:
android://SHA512_HASH@ANDROID_PACKAGE_NAME
Der Wert SHA512HASH ist der SHA-512-Hash Ihrer Signatur
Zertifikat. Sie können diesen Wert mit den Dienstprogrammen keytool
und openssl
abrufen:
keytool -exportcert -keystore path-to-keystore -alias key-name
| openssl sha -sha512 -binary
| base64 -w 0
| tr '+/' '-
Sie können den SHA-512-Hash auch durch Überprüfen eines gültigen ID-Tokens ermitteln.
JWT-Bibliotheken können einige dieser Überprüfungsaufgaben für Sie übernehmen. Beispiel: mithilfe der Google API-Clientbibliothek für 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.");
}
Weitere Informationen finden Sie in der Google Log-in-Dokumentation. .