用户选择 Google 帐号后,One Tap 登录客户端会检索 Google ID 令牌。ID 令牌是用户身份的签名断言,其中还包含用户的基本个人资料信息,可能包括经 Google 验证的电子邮件地址。
获取 ID 令牌后,您可以使用它们安全地对应用的后端进行身份验证,或自动为用户注册新帐号,而无需验证用户的电子邮件地址。
要使用 ID 令牌让用户登录或注册,请将令牌发送到您的应用后端。在后端,使用 Google API 客户端库或通用 JWT 库验证令牌。如果用户之前未使用此 Google 帐号登录过您的应用,请创建新帐号。
如果您选择了可选的 nonce 来帮助避免重放攻击,请使用 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) { // ... } } } // ... }