Как выполнить аутентификацию с помощью токенов идентификации

Клиент входа через 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) {
                      // ...
              }
          }
      }
      // ...
  }