Клиент входа через One Tap получает токен идентификатора Google, когда пользователь выбирает аккаунт Google. Токен идентификации – это подписанное подтверждение личности пользователя, которое также содержит основную информацию из его профиля, в том числе адрес электронной почты, подтвержденный Google.
Если токены идентификации доступны, вы можете использовать их для безопасной аутентификации в серверной части приложения или для автоматической регистрации нового аккаунта без необходимости подтверждать адрес электронной почты пользователя.
Чтобы зарегистрировать пользователя или выполнить вход с помощью токена идентификатора, отправьте токен на серверную часть приложения. На сервере проверьте токен с помощью клиентской библиотеки Google API или библиотеки JWT общего назначения. Если пользователь ранее не входил в ваше приложение с этим аккаунтом Google, создайте новый аккаунт.
Если вы решили использовать одноразовый код для защиты от атак повторного воспроизведения, отправьте его вместе с токеном идентификации на бэкенд-сервер с помощью метода getNonce и проверьте ожидаемое значение. Мы настоятельно рекомендуем использовать одноразовый код, чтобы повысить безопасность пользователей.
Получите токен идентификатора из объекта учетных данных
После получения учетных данных пользователя проверьте, содержит ли объект учетных данных токен идентификатора. Если да, отправьте его в серверную часть.
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) {
// ...
}
}
}
// ...
}