使用者選取 Google 帳戶時,One Tap 登入用戶端會擷取 Google ID 權杖。ID 權杖是使用者身分的簽署斷言,其中還包含使用者的個人資料基本資訊,可能包括經過 Google 驗證的電子郵件地址。
取得 ID 權杖後,您可以使用這些權杖安全地驗證應用程式的後端,或是自動為使用者申請新帳戶,而無需驗證使用者的電子郵件地址。
如要使用 ID 權杖登入或註冊使用者,請將權杖傳送至應用程式的後端。在後端,請使用 Google API 用戶端程式庫或通用 JWT 程式庫驗證權杖。如果使用者未曾使用這個 Google 帳戶登入應用程式,請建立新帳戶。
如果您選擇使用 Nonce 來避免重播攻擊,請使用 getNonce 將 Nonce 和 ID 權杖一併傳送至後端伺服器,並檢查預期值。強烈建議您考慮使用 nonce,以提升使用者安全性。
從憑證物件取得 ID 權杖
擷取使用者的憑證後,請檢查憑證物件是否包含 ID 權杖。如果是,請將其傳送至後端。
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) { // ... } } } // ... }