Kimlik jetonlarını kullanarak oturum açma

Bir kullanıcının kimlik bilgilerini başarıyla aldıktan sonra veya oturum açma ipuçları kullanıldıysa kimlik bilgisi için kimlik jetonu olup olmadığını kontrol edebilirsiniz. Kimlik jetonu, kullanıcının temel profilini de içeren, kullanıcı kimliğinin imzalı onayı web sitesi tarafından doğrulanmış bir e-posta adresi de dahil olmak üzere Google'a dokunun. Kullanılabilir kimlik jetonları, aşağıdaki işlemleri yaparak güvenli bir şekilde gerçekleştirilebilir: uygulamanızın arka ucuyla kimlik doğrulayın veya e-posta doğrulama adımını atlayın lütfen unutmayın.

Credential nesnesinin kullanıcı kimliği, kullanıcıyla eşleştiğinde kimlik jetonu kullanılabilir Cihazda oturum açan bir Google Hesabı'nın kimliği.

Kimlik jetonuyla oturum açmak için önce getIdTokens ile kimlik jetonunu alın yöntemidir. Ardından kimlik jetonunu uygulamanızın arka ucuna gönderin. Arka uçta, doğrulama Google API istemci kitaplığı veya genel amaçlı bir JWT kullanarak jetonu kitaplığını açar.

Başlamadan önce

Credentials nesnesinden bir kimlik jetonu alma

Bir kullanıcının kimlik bilgilerini aldıktan sonra, Credentials nesnesinin bir kimlik jetonu içerir. İçeriyorsa, kodu almak için getIdTokens yöntemini çağırın ve gönderin. arka ucunuza HTTPS POST ile ekleyin.

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 ve jetonun aud, iss ve exp taleplerini doğrulayın.

Şifreler için Smart Lock'tan bir kimlik jetonuyla ilgili aud talebi şuna sahiptir: biçim:

android://SHA512_HASH@ANDROID_PACKAGE_NAME

SHA512HASH değeri, imzanızın SHA-512 karmasıdır sertifikası. keytool ve openssl yardımcı programlarını kullanarak bu değeri elde edebilirsiniz:

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

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

JWT kitaplıkları bu doğrulama görevlerinin bazılarını sizin için gerçekleştirebilir. Ö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.");
}

Google ile Oturum Açma belgelerine bakın. inceleyebilirsiniz.