ID 토큰을 사용하여 백엔드로 인증

원탭 로그인 클라이언트는 사용자가 Google 계정을 선택할 때 Google ID 토큰을 가져옵니다. ID 토큰은 사용자의 기본 프로필 정보(Google에서 확인한 이메일 주소 포함)도 포함하는 사용자의 ID에 대한 서명된 어설션입니다.

ID 토큰을 사용할 수 있는 경우 이를 사용하여 앱의 백엔드를 안전하게 인증하거나 사용자의 이메일 주소를 확인할 필요 없이 사용자를 새 계정에 자동으로 가입시킬 수 있습니다.

ID 토큰으로 사용자를 로그인하거나 가입시키려면 토큰을 앱의 백엔드로 전송하세요. 백엔드에서 Google API 클라이언트 라이브러리 또는 범용 JWT 라이브러리를 사용하여 토큰을 확인합니다. 사용자가 이전에 이 Google 계정으로 앱에 로그인하지 않은 경우 새 계정을 만듭니다.

재생 공격을 방지하기 위해 nonce를 사용하도록 선택한 경우 getNonce 를 사용하여 ID 토큰과 함께 백엔드 서버로 전송하고 예상 값을 확인합니다. 사용자 안전과 보안을 개선하기 위해 nonce를 사용하는 것이 좋습니다.

사용자 인증 정보 객체에서 ID 토큰 가져오기

사용자의 사용자 인증 정보를 가져온 후 사용자 인증 정보 객체에 ID 토큰이 포함되어 있는지 확인합니다. 포함되어 있다면 백엔드로 전송합니다.

자바

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) {
                    // ...
            }
        }
    }
    // ...
}