원탭 로그인 클라이언트는 사용자가 Google 계정을 선택하면 Google ID 토큰을 가져옵니다. ID 토큰은 사용자의 ID에 관한 서명된 어설션으로, Google에서 인증한 이메일 주소를 포함하여 사용자의 기본 프로필 정보도 포함되어 있습니다.
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) { // ... } } } // ... }