לקוח הכניסה בלחיצה אחת מאחזר טוקן של מזהה Google כשהמשתמש בוחר חשבון Google. טוקן מזהה הוא הצהרה חתומה על הזהות של משתמש, והוא מכיל גם את פרטי הפרופיל הבסיסיים של המשתמש, כולל כתובת אימייל שאומתה על ידי Google.
כשזמינים טוקנים של מזהים, אפשר להשתמש בהם כדי לבצע אימות מאובטח עם העורף של האפליקציה, או כדי לרשום את המשתמש באופן אוטומטי לחשבון חדש בלי לאמת את כתובת האימייל של המשתמש.
כדי להיכנס לחשבון או לרשום משתמש באמצעות אסימון מזהה, שולחים את האסימון לקצה העורפי של האפליקציה. בצד השרת, מאמתים את האסימון באמצעות ספריית לקוח של Google API או ספריית JWT לשימוש כללי. אם המשתמש לא נכנס לאפליקציה שלכם עם חשבון Google הזה בעבר, צריך ליצור חשבון חדש.
אם בחרתם להשתמש בערך חד-פעמי כדי למנוע התקפות שידור חוזר, אתם יכולים להשתמש בפונקציה 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) { // ... } } } // ... }