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
- Uygulamanız, kullanıcının kimlik bilgilerini başarıyla alabilmelidir veya bir oturum açma ipucu alın.
setAccountTypes(IdentityProviders.GOOGLE)
CredentialRequest
veHintRequest
nesneleri.
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.