ลงชื่อเข้าใช้โดยใช้โทเค็นรหัส

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

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

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

ก่อนเริ่มต้น

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

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

if (!credential.getIdTokens().isEmpty()) {
    String idToken = credential.getIdTokens().get(0).getIdToken();

    HttpClient httpClient = new DefaultHttpClient();
    HttpPost httpPost = new HttpPost("https://yourbackend.example.com/tokensignin");

    try {
        List nameValuePairs = new ArrayList(1);
        nameValuePairs.add(new BasicNameValuePair("idToken", idToken));
        httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        HttpResponse response = httpClient.execute(httpPost);
        int statusCode = response.getStatusLine().getStatusCode();
        final String responseBody = EntityUtils.toString(response.getEntity());
        Log.i(TAG, "Signed in as: " + responseBody);
    }
}

ยืนยันโทเค็นรหัสในแบ็กเอนด์

หลังจากได้รับโทเค็นรหัสทาง HTTPS POST แล้ว คุณต้องยืนยันโทเค็น ลายเซ็น และยืนยันการอ้างสิทธิ์ aud, iss และ exp ของโทเค็น

การอ้างสิทธิ์ aud ของโทเค็นรหัสจาก Smart Lock สำหรับรหัสผ่านมีข้อมูลต่อไปนี้ รูปแบบ:

android://SHA512_HASH@ANDROID_PACKAGE_NAME

ค่า SHA512HASH คือแฮช SHA-512 ของการรับรอง ใบรับรอง คุณสามารถรับค่านี้โดยใช้ยูทิลิตี keytool และ openssl:

keytool -exportcert -keystore path-to-keystore -alias key-name 
| openssl sha -sha512 -binary
| base64 -w 0
| tr '+/' '-
'

หรือรับแฮช SHA-512 โดยตรวจสอบโทเค็นรหัสที่ทราบว่าถูกต้อง

ไลบรารี JWT สามารถจัดการงานยืนยันเหล่านี้บางส่วนให้คุณได้ ตัวอย่างเช่น โดยใช้ไลบรารีไคลเอ็นต์ Google API สำหรับ Java ดังนี้

import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken;
import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken.Payload;
import com.google.api.client.googleapis.auth.oauth2.GoogleIdTokenVerifier;

...

// Verifier that checks that the token has the proper issuer and audience,
// and hasn't expired
private static GoogleIdTokenVerifier verifier =
    new GoogleIdTokenVerifier.Builder(transport, jsonFactory)
        .setAudience(Arrays.asList(String.format("android://%s@%s", SHA512_HASH, PACKAGE_NAME)))
        .build();

// (Receive idTokenString by HTTPS POST)

GoogleIdToken idToken = verifier.verify(idTokenString);
if (idToken != null) {
  Payload payload = idToken.getPayload();
  System.out.println("User email: " + payload.getEmail());
  if (payload.getEmailVerified()) {
    System.out.println("Email verified by Google.");
  }
} else {
  System.out.println("Invalid ID token.");
}

โปรดดูเอกสารประกอบ Google Sign-In เพื่อดูรายละเอียดเพิ่มเติม