Kullanıcının kimlik bilgilerini başarıyla aldıktan veya oturum açma ipuçlarını aldıktan sonra kimlik bilgisi için kimlik jetonunun kullanılabilir olup olmadığını kontrol edebilirsiniz. Kimlik jetonu, kullanıcının kimliğinin imzalı bir onayının yanı sıra kullanıcının temel profil bilgilerini (Google tarafından doğrulanmış bir e-posta adresi de dahil olabilir) içerir. Kimlik jetonları kullanıma sunulduğunda, uygulamanızın arka ucuyla güvenli bir şekilde kimlik doğrulamak veya yeni hesap oluştururken e-posta doğrulama adımını atlamak için bu jetonları kullanabilirsiniz.
Bir Credential
nesnesinin kullanıcı kimliği, cihazda oturum açılmış bir Google Hesabı'nın kullanıcı kimliğiyle eşleştiğinde kimlik jetonu kullanılabilir.
Kimlik jetonuyla oturum açmak için önce getIdTokens
yöntemiyle kimlik jetonunu alın. 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.
Başlamadan önce
- Uygulamanız, kullanıcı kimlik bilgilerini veya oturum açma ipucunu başarılı bir şekilde alabilmelidir.
CredentialRequest
veHintRequest
nesnelerini oluştururkensetAccountTypes(IdentityProviders.GOOGLE)
işlevini çağırmanız gerekir.
Kimlik bilgileri nesnesinden kimlik jetonu alma
Bir kullanıcının kimlik bilgilerini aldıktan sonra Credentials
nesnesinin kimlik jetonu içerip içermediğini kontrol edin. Bu durumda, almak için getIdTokens
numarasını arayın ve HTTPS POST ile arka ucunuza 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çta kimlik jetonunu doğrulama
HTTPS POST ile kimlik jetonunu aldıktan sonra jetonun imzasını ve jetonun aud
, iss
ve exp
taleplerini doğrulamanız gerekir.
Şifreler için Smart Lock'tan alınan kimlik jetonunun aud
talebi şu biçimdedir:
android://SHA512_HASH@ANDROID_PACKAGE_NAME
SHA512HASH değeri, imzalama sertifikanızın SHA-512 karmasıdır. 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 '+/' '-
Alternatif olarak, geçerli olduğunu bildiğiniz bir kimlik jetonunu inceleyerek SHA-512 karmasını alabilirsiniz.
JWT kitaplıkları, bu doğrulama görevlerinden bazılarını sizin yerinize gerçekleştirebilir. Örneğin, Java için Google Auth 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 ile oturum açma belgelerini inceleyin.