אימות באמצעות קצה עורפי באמצעות אסימונים מזהים

הלקוח של הכניסה בלחיצה אחת מאחזר טוקן של מזהה Google כשהמשתמש בוחר חשבון Google. טוקן של מזהה הוא טענת נכוֹנוּת (assertion) חתומה של זהות המשתמש, שמכילה גם את פרטי הפרופיל הבסיסיים של המשתמש, ואולי גם כתובת אימייל שאומתה על ידי Google.

כשטוקנים של מזהים זמינים, אתם יכולים להשתמש בהם כדי לבצע אימות מאובטח בקצה העורפי של האפליקציה, או כדי לרשום את המשתמש באופן אוטומטי לחשבון חדש בלי לאמת את כתובת האימייל שלו.

כדי להכניס משתמש או לרשום אותו באמצעות טוקן של מזהה, שולחים את הטוקן לקצה העורפי של האפליקציה. ב-backend, מאמתים את האסימון באמצעות ספריית לקוח של Google API או ספריית JWT לשימוש כללי. אם המשתמש לא נכנס לאפליקציה עם חשבון Google הזה בעבר, יוצרים חשבון חדש.

אם בחרתם להשתמש ב-nonce כדי למנוע התקפות של הפעלה חוזרת, השתמשו ב-getNonce כדי לשלוח אותו יחד עם טוקן המזהה לשרת הקצה העורפי, ובדקו אם הערך הוא הערך הצפוי. אנחנו ממליצים מאוד להשתמש ב-nonce כדי לשפר את הבטיחות והאבטחה של המשתמשים.

קבלת טוקן של מזהה מאובייקט פרטי הכניסה

אחרי שמאחזרים את פרטי הכניסה של המשתמש, בודקים אם אובייקט פרטי הכניסה כולל טוקן של מזהה. אם כן, שולחים אותו לקצה העורפי.

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) {
                      // ...
              }
          }
      }
      // ...
  }