ดําเนินการยืนยันทาง SMS บนเซิร์ฟเวอร์

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

เซิร์ฟเวอร์การยืนยันทางโทรศัพท์มีหน้าที่หลัก 3 ประการดังนี้

  1. การสร้างข้อความยืนยันที่มีรหัสแบบใช้ครั้งเดียวและมีรูปแบบที่ SMS Fetchr API ฝั่งไคลเอ็นต์คาดหวัง
  2. กําลังส่งข้อความยืนยันไปยังอุปกรณ์ของผู้ใช้
  3. การยืนยันเป็นรหัสแบบใช้ครั้งเดียวเมื่อเซิร์ฟเวอร์ส่งกลับมายังเซิร์ฟเวอร์ และทํางานหลังการยืนยันทั้งหมดที่แบ็กเอนด์ของคุณกําหนด

รายละเอียดเฉพาะของวิธีที่แอปโต้ตอบกับเซิร์ฟเวอร์จะขึ้นอยู่กับคุณ แนวทางที่ใช้กันโดยทั่วไปคือการแสดง REST API ที่มี 2 ปลายทาง ได้แก่ ส่วนที่ได้รับคําขอเพื่อยืนยันหมายเลขโทรศัพท์ที่ระบุและส่งข้อความการยืนยันทาง SMS และปลายทางที่ 2 ที่ได้รับรหัสแบบใช้ครั้งเดียวจากแอป

1. สร้างข้อความยืนยัน

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

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

Your ExampleApp code is: 123ABC78

FA+9qCX9VSu

การสร้างรหัสแบบใช้ครั้งเดียว

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

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

รหัส ผู้ใช้ วันหมดอายุ
123456789... 1234 3-14-2017 1:59

คุณจะใช้รหัสที่เข้ารหัส base32 เป็นรหัสแบบใช้ครั้งเดียวได้

กําลังคํานวณสตริงแฮชของแอป

บริการ Google Play ใช้สตริงแฮชเพื่อระบุว่าควรส่งข้อความยืนยันใดไปยังแอปของคุณ สตริงแฮชประกอบด้วยชื่อแพ็กเกจของแอปและใบรับรองคีย์สาธารณะของแอป วิธีสร้างสตริงแฮช

  1. หากคุณใช้ App Signing โดย Google Play ให้ดาวน์โหลดใบรับรอง App Signing (deployment_cert.der) จากส่วน App Signing ของ Google Play Console

    จากนั้นนําเข้าใบรับรอง App Signing ไปยังที่เก็บคีย์ชั่วคราว โดยทําดังนี้

    keytool -importcert -file deployment_cert.der -keystore temporary.keystore -alias PlayDeploymentCert
    

    หากคุณรับรอง APK โดยตรง ให้ข้ามขั้นตอนนี้

  2. รับใบรับรอง App Signing ของคุณ ซึ่งอาจเป็นใบรับรองที่คุณนําเข้าข้างต้น หรือใบรับรองที่คุณใช้เพื่อลงนาม APK โดยตรงเป็นสตริงแบบเลขฐานสิบหกตัวพิมพ์เล็ก

    ตัวอย่างเช่น หากต้องการรับสตริงฐานสิบหกจากคีย์สโตร์ชั่วคราวที่สร้างไว้ด้านบน ให้พิมพ์คําสั่งต่อไปนี้

    keytool -exportcert -keystore temporary.keystore -alias PlayDeploymentCert | xxd -p | tr -d "[:space:]"
    

    หากคุณรับรอง APK โดยตรง ให้ระบุคีย์สโตร์และชื่อแทนใบรับรองเวอร์ชันที่ใช้งานจริง

  3. หากคุณสร้างคีย์สโตร์ชั่วคราว ให้ลบคีย์สโตร์ดังกล่าว

  4. เพิ่มสตริงเลขฐาน 16 ลงในชื่อแพ็กเกจของแอปโดยคั่นด้วยการเว้นวรรค

  5. คํานวณผลรวมของ SHA-256 ของสตริงแบบรวม อย่าลืมนําช่องว่างนําหน้าหรือต่อท้ายออกจากสตริงก่อนที่จะคํานวณผลรวม SHA-256

  6. เข้ารหัสฐาน 64 ของผลรวม SHA-256 คุณอาจต้องถอดรหัส ผลรวม SHA-256 จากรูปแบบเอาต์พุตก่อน

  7. สตริงแฮชของแอปเป็นอักขระ 11 ตัวแรกของแฮชฐาน 64

คําสั่งต่อไปนี้จะคํานวณสตริงแฮชจากคีย์สโตร์ของเวอร์ชันที่ใช้งานจริง

keytool -exportcert -alias PlayDeploymentCert -keystore MyProductionKeys.keystore | xxd -p | tr -d "[:space:]" | echo -n com.example.myapp `cat` | sha256sum | tr -d "[:space:]-" | xxd -r -p | base64 | cut -c1-11

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

2. ส่งข้อความการยืนยันทาง SMS

หลังจากสร้างข้อความยืนยัน ให้ส่งข้อความไปยังหมายเลขโทรศัพท์ของผู้ใช้โดยใช้ระบบ SMS

ตัวอย่างเช่น ดูการยืนยันแอปโดยใช้ Twilio SMS ในเว็บไซต์นักพัฒนาซอฟต์แวร์ Twilio&#39

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

3. ยืนยันรหัสแบบใช้ครั้งเดียวเมื่อสินค้าส่งคืน

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

  1. ยืนยันว่ารหัสแบบใช้ครั้งเดียวถูกต้องและยังไม่หมดอายุ
  2. บันทึกว่าผู้ใช้ที่เชื่อมโยงกับรหัสแบบใช้ครั้งเดียว ได้ยืนยันหมายเลขโทรศัพท์แล้ว
  3. นําบันทึกฐานข้อมูลแบบใช้ครั้งเดียวออก หรือมิฉะนั้นให้ใช้รหัสเดียวกันอีกไม่ได้

เมื่อบันทึกสถานะการยืนยันของผู้ใช้และนําโค้ดแบบใช้ครั้งเดียวออกจากฐานข้อมูล การยืนยันจะเสร็จสมบูรณ์