הלקוח של הכניסה בלחיצה אחת מאחזר טוקן של מזהה 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) {
// ...
}
}
}
// ...
}