تسجيل الدخول باستخدام الرموز المميّزة للمعرّفات

بعد استرداد بيانات اعتماد المستخدم بنجاح أو استرداد نصائح تسجيل الدخول، يمكنك التحقق من توفر رمز المعرف لبيانات الاعتماد. الرمز المميز للمعرف هو تأكيد موقَّع على هوية المستخدم التي تحتوي أيضًا على الملف الشخصي الأساسي للمستخدم من المعلومات، بما في ذلك عنوان بريد إلكتروني تم التحقق منه من قِبل Google. وعند توفّر الرموز المميّزة للمستندات، يمكنك استخدامها بأمان للمصادقة مع واجهة التطبيق أو لتخطّي خطوة إثبات ملكية عنوان البريد الإلكتروني عند إنشاء حساب جديد.

يتوفّر رمز مميّز لرقم التعريف عندما يتطابق رقم تعريف مستخدم عنصر Credential مع المستخدم. رقم تعريف حساب Google الذي تم تسجيل الدخول إليه على الجهاز.

لتسجيل الدخول باستخدام رمز مميّز لرقم التعريف، عليك أولاً استرداد الرمز المميّز لرقم التعريف باستخدام getIdTokens. . بعد ذلك، أرسِل الرمز المميّز لرقم التعريف إلى واجهة تطبيقك الخلفية. في الخلفية، تأكَّد من الرمز باستخدام مكتبة برامج Google API أو رمز JWT للأغراض العامة المكتبة.

قبل البدء

الحصول على رمز مميز للمعرّف من كائن "Credentials" (بيانات الاعتماد)

بعد استرداد بيانات اعتماد المستخدم، تحقَّق مما إذا كان كائن Credentials يتضمن رمزًا مميزًا للمعرف. في هذه الحالة، يُرجى الاتصال بـ getIdTokens لاسترداده وإرساله إلى الخلفية من خلال طريقة 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);
    }
}

التحقّق من الرمز المميّز لرقم التعريف في الخلفية

بعد تلقّي الرمز المميّز للمعرّف من خلال طريقة HTTPS POST، يجب التأكّد من صحة التوقيع، والتحقق من المطالبات aud وiss وexp الخاصة بالرمز المميز.

في ما يلي مطالبة aud بالرمز المميز للمعرّف من Smart Lock لكلمات المرور ما يلي: التنسيق:

android://SHA512_HASH@ANDROID_PACKAGE_NAME

القيمة SHA512HASH هي تجزئة SHA-512 للتوقيع. الشهادة. يمكنك الحصول على هذه القيمة باستخدام أداتَي المساعدة keytool وopenssl:

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

أو يمكنك الحصول على تجزئة SHA-512 عن طريق فحص رمز المعرف الذي تعرف أنه صالح.

يمكن لمكتبات JWT معالجة بعض مهام إثبات الملكية هذه نيابةً عنك. على سبيل المثال: باستخدام مكتبة برامج واجهة Google API للغة 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.");
}

اطّلِع على مستندات تسجيل الدخول بحساب Google. لمزيد من التفاصيل.