使用者選取 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) {
// ...
}
}
}
// ...
}