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