Po pobraniu danych logowania użytkownika lub pobrane wskazówki logowania, możesz sprawdzić, czy dla danych logowania jest dostępny token tożsamości. Token tożsamości to podpisane potwierdzenie tożsamości użytkownika, które zawiera też podstawowy profil użytkownika takich jak adres e-mail zweryfikowany przez Google. Jeśli tokeny tożsamości są dostępne, możesz ich używać do bezpiecznego uwierzytelnij się w backendzie aplikacji lub pomiń krok weryfikacji adresu e-mail. podczas tworzenia nowego konta.
Token identyfikatora jest dostępny, gdy identyfikator użytkownika obiektu Credential
pasuje do użytkownika
Identyfikator konta Google zalogowanego na urządzeniu.
Aby zalogować się przy użyciu tokena identyfikatora, najpierw pobierz go za pomocą interfejsu getIdTokens
. Następnie wyślij token identyfikatora do backendu aplikacji. W backendzie sprawdź,
token za pomocą biblioteki klienta interfejsu API Google lub tokena JWT ogólnego przeznaczenia.
bibliotece.
Zanim zaczniesz
- Aplikacja musi mieć możliwość pobrania danych logowania użytkownika lub uzyskać podpowiedź logowania.
- Musisz wywołać funkcję
setAccountTypes(IdentityProviders.GOOGLE)
podczas tworzeniaCredentialRequest
iHintRequest
obiektów.
Uzyskiwanie tokena identyfikatora z obiektu danych logowania
Po pobraniu danych logowania użytkownika sprawdź, czy obiekt Credentials
zawiera token tożsamości. Jeśli tak, wywołaj getIdTokens
, aby ją odzyskać i wysłać
do backendu za pomocą metody 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);
}
}
Sprawdzanie tokena identyfikatora w backendzie
Po otrzymaniu tokena tożsamości za pomocą metody HTTPS POST musisz zweryfikować poprawność
podpis i zweryfikuj deklaracje aud
, iss
i exp
tokena.
Żądanie tokena aud
dotyczące tokena tożsamości z usługi Smart Lock na hasła składa się z tych elementów:
format:
android://SHA512_HASH@ANDROID_PACKAGE_NAME
Wartość SHA512HASH to identyfikator SHA-512 Twojego podpisu.
certyfikat. Tę wartość możesz sprawdzić za pomocą narzędzi keytool
i openssl
:
keytool -exportcert -keystore path-to-keystore -alias key-name
'
| openssl sha -sha512 -binary
| base64 -w 0
| tr '+/' '-
Możesz też uzyskać hasz SHA-512, sprawdzając token tożsamości, o którym wiesz, że jest prawidłowy.
Biblioteki JWT mogą obsługiwać niektóre z tych zadań weryfikacji. Przykład: korzystając z biblioteki klienta interfejsów API Google dla języka 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.");
}
Zapoznaj się z dokumentacją Logowania przez Google. .