当用户选择 Google 账号时,一键登录客户端会检索 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) { // ... } } } // ... }