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

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

عند توفّر رموز التعريف، يمكنك استخدامها للمصادقة بأمان على الواجهة الخلفية لتطبيقك، أو لتسجيل المستخدم تلقائيًا في حساب جديد بدون الحاجة إلى التحقّق من عنوان البريد الإلكتروني للمستخدم.

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

إذا اخترت اختياريًا استخدام رقم خاص للمساعدة في تجنُّب هجمات إعادة التشغيل، استخدِم getNonce لإرساله مع رمز التعريف إلى خادم الخلفية، وتحقَّق من الـ قيمة المتوقّعة. ننصحك بشدة باستخدام رقم خاص لتحسين سلامة المستخدم وأمانه.

الحصول على رمز تعريف من عنصر بيانات الاعتماد

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

Java

public class YourActivity extends AppCompatActivity {

  // ...
  private static final int REQ_ONE_TAP = 2;  // Can be any integer unique to the Activity.
  private boolean showOneTapUI = true;
  // ...

  @Override
  protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
      super.onActivityResult(requestCode, resultCode, data);

      switch (requestCode) {
          case REQ_ONE_TAP:
              try {
                  SignInCredential credential = oneTapClient.getSignInCredentialFromIntent(data);
                  String idToken = credential.getGoogleIdToken();
                  if (idToken !=  null) {
                      // Got an ID token from Google. Use it to authenticate
                      // with your backend.
                      Log.d(TAG, "Got ID token.");
                  }
              } catch (ApiException e) {
                  // ...
              }
              break;
      }
  }
}

Kotlin

class YourActivity : AppCompatActivity() {

    // ...
    private val REQ_ONE_TAP = 2  // Can be any integer unique to the Activity
    private var showOneTapUI = true
    // ...

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        when (requestCode) {
             REQ_ONE_TAP -> {
                try {
                    val credential = oneTapClient.getSignInCredentialFromIntent(data)
                    val idToken = credential.googleIdToken
                    when {
                        idToken != null -> {
                            // Got an ID token from Google. Use it to authenticate
                            // with your backend.
                            Log.d(TAG, "Got ID token.")
                        }
                        else -> {
                            // Shouldn't happen.
                            Log.d(TAG, "No ID token!")
                        }
                    }
                } catch (e: ApiException) {
                    // ...
            }
        }
    }
    // ...
}