ตรวจสอบสิทธิ์ด้วยแบ็กเอนด์โดยใช้โทเค็นรหัส

ไคลเอ็นต์การลงชื่อเข้าใช้ด้วย One Tap จะดึงข้อมูลโทเค็นรหัส Google เมื่อผู้ใช้เลือกบัญชี Google โทเค็นระบุตัวตนคือการยืนยันที่ลงนามของข้อมูลระบุตัวตนของผู้ใช้ซึ่งมีข้อมูลโปรไฟล์พื้นฐานของผู้ใช้ด้วย ซึ่งอาจรวมถึงอีเมลที่ Google ยืนยันแล้ว

เมื่อโทเค็นระบุตัวตนพร้อมใช้งานแล้ว คุณจะใช้โทเค็นดังกล่าวเพื่อตรวจสอบสิทธิ์กับแบ็กเอนด์ของแอปอย่างปลอดภัย หรือเพื่อลงชื่อสมัครใช้บัญชีใหม่ให้ผู้ใช้โดยอัตโนมัติได้โดยไม่ต้องยืนยันอีเมลของผู้ใช้

หากต้องการลงชื่อเข้าใช้หรือลงชื่อสมัครใช้ผู้ใช้ด้วยโทเค็นระบุตัวตน ให้ส่งโทเค็นไปยังแบ็กเอนด์ของแอป ในแบ็กเอนด์ ให้ยืนยันโทเค็นโดยใช้ไลบรารีไคลเอ็นต์ Google API หรือไลบรารี JWT อเนกประสงค์ หากผู้ใช้ไม่เคยลงชื่อเข้าใช้แอปด้วยบัญชี Google นี้มาก่อน ให้สร้างบัญชีใหม่

หากเลือกที่จะใช้ Nonce เพื่อช่วยหลีกเลี่ยงการโจมตีด้วยการเล่นซ้ำหรือไม่ใช้ก็ได้ ให้ใช้ getNonce เพื่อส่ง Nonce ไปพร้อมกับโทเค็นระบุตัวตนไปยังเซิร์ฟเวอร์แบ็กเอนด์ และตรวจสอบค่าที่คาดไว้ เราขอแนะนําอย่างยิ่งให้คุณพิจารณาใช้ Nonce เพื่อปรับปรุงความปลอดภัยของผู้ใช้

รับโทเค็นระบุตัวตนจากออบเจ็กต์ข้อมูลเข้าสู่ระบบ

หลังจากดึงข้อมูลเข้าสู่ระบบของผู้ใช้แล้ว ให้ตรวจสอบว่าออบเจ็กต์ข้อมูลเข้าสู่ระบบมีโทเค็นระบุตัวตนหรือไม่ หากใช่ ให้ส่งไปยังแบ็กเอนด์

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