Tek Dokunuşla oturum açma ihtiyaçlarınızı karşılıyorsa, bunun yerine kullanmayı düşünün. One Tap, güncellenmiş bir kullanıcı deneyimine ve diğer iyileştirmelere sahiptir.

Kimlik Jetonlarını Kullanarak Oturum Açın

Bir kullanıcının kimlik bilgilerini veya oturum açma ipuçlarını başarıyla aldıktan sonra, kimlik bilgileri için bir kimlik belirteci olup olmadığını kontrol edebilirsiniz. Kimlik jetonu, muhtemelen Google tarafından doğrulanmış bir e-posta adresi de dahil olmak üzere bir kullanıcının temel profil bilgilerini içeren imzalı bir kullanıcı kimliği iddiasıdır. Kimlik jetonları mevcut olduğunda, bunları uygulamanızın arka ucuyla güvenli bir şekilde kimlik doğrulamak için veya yeni bir hesap oluştururken e-posta doğrulama adımını atlamak için kullanabilirsiniz.

Credential nesnesinin kullanıcı kimliği, cihazda oturum açmış bir Google hesabının kullanıcı kimliğiyle eşleştiğinde bir kimlik belirteci kullanılabilir.

Bir kimlik belirteci ile oturum açmak için önce getIdTokens yöntemiyle kimlik belirtecini getIdTokens . Ardından, kimlik jetonunu uygulamanızın arka ucuna gönderin. Arka uçta, jetonu bir Google API istemci kitaplığı veya genel amaçlı bir JWT kitaplığı kullanarak doğrulayın.

Sen başlamadan önce

Credentials nesnesinden bir kimlik jetonu alın

Bir kullanıcının kimlik bilgilerini aldıktan sonra, Credentials nesnesinin bir ID jetonu Credentials kontrol edin. Varsa, almak için getIdTokens arayın ve HTTPS POST ile arka getIdTokens gönderin.

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);
    }
}

Arka uçtaki kimlik jetonunu doğrulayın

Kimlik jetonunu HTTPS POST ile aldıktan sonra, jetonun imzasını ve jetonun aud , iss ve exp taleplerini doğrulamalısınız.

Şifreler için Smart Lock'tan bir kimlik jetonunun aud talebi şu biçime sahiptir:

android://SHA512_HASH@ANDROID_PACKAGE_NAME

SHA512 HASH değeri, imzalama sertifikanızın SHA-512 SHA512 HASH . Bu değeri keytool ve openssl yardımcı programlarını kullanarak alabilirsiniz:

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

Veya SHA-512 karmasını, geçerli olduğunu bildiğiniz bir kimlik jetonunu inceleyerek alabilirsiniz.

JWT kitaplıkları bu doğrulama görevlerinden bazılarını sizin için halledebilir. Örneğin, Java için Google API istemci kitaplığını kullanarak:

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.");
}

Daha fazla ayrıntı için Google Oturum Açma belgelerine bakın.