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

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

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

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

إذا اخترت استخدام مفتاح nonce اختياريًا للمساعدة في تجنُّب هجمات إعادة التشغيل، استخدِم 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) {
                    // ...
            }
        }
    }
    // ...
}