使用者選取 Google 帳戶時,One Tap 登入用戶端會擷取 Google ID 權杖。ID 權杖是經過簽署的使用者身分聲明,也包含使用者的基本個人資料資訊,可能包括 Google 驗證過的電子郵件地址。
取得 ID 權杖後,您可以使用權杖安全地向應用程式後端進行驗證,或自動為使用者註冊新帳戶,不必驗證使用者的電子郵件地址。
如要使用 ID 權杖登入或註冊使用者,請將權杖傳送至應用程式的後端。在後端,使用 Google API 用戶端程式庫或一般用途的 JWT 程式庫驗證權杖。如果使用者先前未曾透過這個 Google 帳戶登入您的應用程式,請建立新帳戶。
如果您選擇使用隨機數來避免重播攻擊,請使用 getNonce 將隨機數連同 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) { // ... } } } // ... }