כדי לאמת מספרי טלפון באופן אוטומטי, עליכם להטמיע גם את חלק הלקוח וגם את שרת השרת של תהליך האימות. במסמך הזה מוסבר איך מטמיעים את החלק שבשרת.
שרת האימות הטלפוני אחראי לשלוש משימות:
- יצירת הודעת אימות שכוללת קוד חד-פעמי ובפורמט שלה מתקבל ה-SMS API מסוג reCAPTCHA בצד הלקוח
- מתבצעת שליחה של הודעת האימות למכשיר של המשתמש
- אימות הקוד החד-פעמי כאשר הוא נשלח חזרה לשרת ומשלים את כל המשימות שמבוצעות לאחר האימות
אתם קובעים את אופן האינטראקציה של האפליקציה עם השרת. גישה נפוצה היא לחשוף API API ל-REST באמצעות שתי נקודות קצה: אחת שמקבלת בקשות לאימות מספר טלפון נתון ושולחת הודעות אימות ב-SMS, ונקודת קצה שנייה שמקבלת קודים חד-פעמיים מהאפליקציה.
1. יצירת הודעת אימות
כאשר השרת שלכם מקבל בקשה לאימות מספר טלפון, תחילה עליכם ליצור את הודעת האימות שתישלח למכשיר של המשתמש. ההודעה חייבת לכלול:
- להיות באורך של עד 140 בייט
- מכילים קוד חד-פעמי שהלקוח שולח בחזרה לשרת כדי להשלים את תהליך האימות (ראו יצירת קוד חד-פעמי)
- מוסיפים מחרוזת גיבוב (hash) באורך 11 תווים שמזהה את האפליקציה (ראו חישוב מחרוזת הגיבוב של האפליקציה)
אחרת, תוכן הודעת האימות יכול להיות כל מה שתבחרו. כדאי ליצור הודעה שממנה תוכלו לחלץ בקלות את הקוד החד-פעמי מאוחר יותר. לדוגמה, הודעת אימות תקפה עשויה להיראות כך:
Your ExampleApp code is: 123ABC78FA+9qCX9VSu
יצירת קוד חד-פעמי
אפשר להטמיע קודים חד-פעמיים בדרכים רבות, כל עוד לא ניתן לטעון את הקודים ואפשר לקשר את הקודים למשתמש או למספר טלפון כשאפליקציית הלקוח שולחת אותם חזרה לשרת שלכם. חשוב להקליד את הקודים בקלות, כדי לטפל במצבים שבהם משתמשים עלולים להקליד את הקוד באופן ידני.
אחת השיטות להטמיע קודים חד-פעמיים היא ליצור מספרים אקראיים, שבהם אתם משתמשים כמפתחות בטבלת מסד נתונים. לדוגמה, יכולה להיות לכם טבלה בהמתנה לאימות:
מזהה | משתמש | תוקף הרישיון |
---|---|---|
123456789... | 1234 | 2017-3-14 1:59 |
אפשר להשתמש במזהה בקידוד base32 כקוד חד-פעמי.
חישוב מחרוזת הגיבוב של האפליקציה שלך
פלטפורמת Google Play Services משתמשת במחרוזת הגיבוב כדי לקבוע אילו הודעות אימות יישלחו לאפליקציה שלכם. מחרוזת הגיבוב מורכבת משם החבילה של האפליקציה ומאישור המפתח הציבורי של האפליקציה. כדי ליצור את מחרוזת הגיבוב:
אם בחרת להשתמש בחתימת אפליקציות על ידי Google Play, עליך להוריד את אישור חתימת האפליקציה (
deployment_cert.der
) בקטע חתימת אפליקציות במסוף Google Play .לאחר מכן, מייבאים את אישור החתימה של האפליקציה לחנות מפתחות זמנית:
keytool -importcert -file deployment_cert.der -keystore temporary.keystore -alias PlayDeploymentCert
אם חתמת על חבילות ה-APK ישירות, אפשר לדלג על השלב הזה.
מקבלים את חתימת האפליקציה – זו שייבאתם למעלה או זו שבעזרתה אתם חותמים ישירות על חבילות ה-APK – כמחרוזת הקסדצימלית באותיות קטנות.
לדוגמה, כדי לקבל את מחרוזת המשושה ממאגר המפתחות הזמני שנוצר למעלה, מקלידים את הפקודה הבאה:
keytool -exportcert -keystore temporary.keystore -alias PlayDeploymentCert | xxd -p | tr -d "[:space:]"
אם חתמתם על חבילות ה-APK באופן ישיר, עליכם לציין את מאגר המפתחות ואת כינוי האישור.
אם יצרת מאגר מפתחות זמני, צריך למחוק אותו.
הוסיפו את המחרוזת המשושה לשם החבילה של האפליקציה, מופרדים ברווחים.
חישוב סכום SHA-256 של המחרוזת המשולבת. הקפידו להסיר מהרווח את כל התווים הלבנים המובילים או הנגררים לפני החישוב של סכום ה-SHA-256.
Base64 מקודד את הערך הבינארי של סכום ה-SHA-256. יכול להיות שקודם צריך לפענח את הסכום SHA-256 מפורמט הפלט שלו.
מחרוזת הגיבוב של האפליקציה היא 11 התווים הראשונים של הגיבוב בקידוד base64.
הפקודה הבאה מחשבת את מחרוזת ה-hash מחנות המפתחות של האפליקציה שלך:
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 reCAPTCHA. עם זאת, אם משתמשים במחלקת העוזר, חשוב להסיר אותה מהאפליקציה אחרי שמקבלים את מחרוזת הגיבוב. אין להשתמש במחרוזות גיבוב שמחושבים באופן דינמי על הלקוח בהודעות האימות.
2. שליחת הודעת האימות ב-SMS
אחרי שיוצרים את הודעת האימות, שולחים את ההודעה למספר הטלפון של המשתמש באמצעות מערכת SMS.
לדוגמה, אפשר לעיין באימות אפליקציה באמצעות Twilio SMS באתר למפתחים של Twilio'.
כאשר המכשיר של המשתמש מקבל את ההודעה הזו, ההודעה מועברת לאפליקציה שלך. האפליקציה מחלצת את הקוד החד-פעמי ושולחת אותו חזרה לשרת שלך כדי להשלים את תהליך האימות.
3. אימות הקוד החד-פעמי כשהוא חוזר
לשרת אימות מספרי טלפון יש בדרך כלל נקודת קצה שנייה שבה הוא משתמש כדי לקבל קודים חד-פעמיים מאפליקציות הלקוח. כאשר השרת שלכם מקבל קוד חד-פעמי מהאפליקציה בנקודת קצה זו, עליכם לבצע את הפעולות הבאות:
- מוודאים שהקוד החד-פעמי תקף ושלא פג תוקפו.
- צריך לציין שהמשתמש שקישר לקוד החד-פעמי השלים את אימות מספר הטלפון.
- יש להסיר את רשומת מסד הנתונים של הקוד החד-פעמי, או בדרך אחרת לוודא שלא ניתן להשתמש באותו קוד שוב.
כשמקליטים את סטטוס האימות של המשתמש ומסירים את הקוד החד-פעמי ממסד הנתונים, האימות מסתיים.