หลังจากที่คุณดึงข้อมูลเข้าสู่ระบบของผู้ใช้เรียบร้อยแล้ว หรือคำแนะนำในการลงชื่อเข้าใช้ที่ได้มา คุณสามารถตรวจสอบว่าโทเค็นรหัสใช้กับข้อมูลเข้าสู่ระบบได้หรือไม่ โทเค็นรหัสคือ การยืนยันข้อมูลประจำตัวของผู้ใช้ที่มีโปรไฟล์พื้นฐานของผู้ใช้รวมอยู่ด้วย เช่น อีเมลที่ได้รับการยืนยันโดย Google เมื่อรหัสโทเค็นพร้อมใช้งาน คุณจะใช้โทเค็นดังกล่าวเพื่อรักษาความปลอดภัย ตรวจสอบสิทธิ์ด้วยแบ็กเอนด์ของแอป หรือข้ามขั้นตอนการยืนยันอีเมล เมื่อสร้างบัญชีใหม่
โทเค็นรหัสจะใช้ได้เมื่อรหัสผู้ใช้ของออบเจ็กต์ Credential
ตรงกับผู้ใช้
รหัสบัญชี Google ที่ลงชื่อเข้าใช้ในอุปกรณ์
หากต้องการลงชื่อเข้าใช้ด้วยโทเค็นรหัส ให้เรียกโทเค็นรหัสด้วยgetIdTokens
ก่อน
จากนั้นส่งโทเค็นรหัสไปยังแบ็กเอนด์ของแอป ตรวจสอบในแบ็กเอนด์
โทเค็นที่ใช้ไลบรารีของไคลเอ็นต์ Google API หรือ JWT อเนกประสงค์
ไลบรารี
ก่อนเริ่มต้น
- แอปต้องดึงข้อมูลเข้าสู่ระบบของผู้ใช้ได้สำเร็จ หรือดึงข้อมูลคำแนะนำในการลงชื่อเข้าใช้
- คุณต้องโทรหา
setAccountTypes(IdentityProviders.GOOGLE)
เมื่อสร้างCredentialRequest
และHintRequest
ออบเจ็กต์
รับโทเค็นรหัสจากออบเจ็กต์ข้อมูลเข้าสู่ระบบ
หลังจากเรียกข้อมูลเข้าสู่ระบบของผู้ใช้แล้ว ให้ตรวจสอบว่าออบเจ็กต์ 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 เพื่อดูรายละเอียดเพิ่มเติม