ביצוע אימות באמצעות SMS בשרת

כדי לאמת מספרי טלפון באופן אוטומטי, עליך ליישם גם את הלקוח וגם את חלקי השרת בתהליך האימות. במסמך הזה נסביר איך להטמיע את החלק של השרת.

שרת האימות הטלפוני אחראי לשלוש משימות:

  1. בניית הודעת אימות שכוללת קוד חד-פעמי הפורמט ש-SMS Retriever API מצפה בצד הלקוח
  2. מתבצעת שליחה של הודעת האימות אל למכשיר של המשתמש
  3. אימות של הקוד החד-פעמי כשהוא נשלח בחזרה לשרת והשלמת התהליך משימות לאחר האימות שנדרשות לקצה העורפי

אתם קובעים את אופי האינטראקציה של האפליקציה עם השרת. היא לחשוף API ל-REST עם שתי נקודות קצה: אחת שמקבלת בקשות כדי לאמת מספר טלפון מסוים ולשלוח את הודעות האימות ב-SMS, את נקודת הקצה השנייה שמקבלת קודים חד-פעמיים מהאפליקציה.

1. יצירה של הודעת אימות

כשהשרת מקבל בקשה לאמת מספר טלפון, קודם צריך ליצור הודעת האימות ששולחים למכשיר של המשתמש. ההודעה הזו חייב:

  • להיות בגודל של עד 140 בייטים
  • מכילים קוד חד-פעמי שהלקוח שולח חזרה לשרת שלכם אל להשלים את תהליך האימות (מפורטים יצירת קוד חד-פעמי)
  • צריך לכלול מחרוזת גיבוב (hash) באורך 11 תווים שמזהה את האפליקציה שלך (מידע נוסף זמין כאן: חישוב מחרוזת ה-hash של האפליקציה)

אחרת, התוכן של הודעת האימות יכול להיות לבחירתכם. כדאי ליצור הודעה שאפשר לשלוף ממנה בקלות את הקוד החד-פעמי את הקוד מאוחר יותר. לדוגמה, הודעת אימות תקפה עשויה להיראות כך: הבאים:

Your ExampleApp code is: 123ABC78

FA+9qCX9VSu

המערכת יוצרת קוד חד-פעמי

ניתן ליישם קודים חד-פעמיים בדרכים רבות, כל עוד הקודים קשה לניחוש, ותוכלו לקשר את הקודים למשתמש או למספר טלפון כשהלקוח שולח אותן בחזרה לשרת. עליך להקל על הקלדת הקודים, להתאים לכל מצב שבו המשתמשים צריכים להקליד את הקוד באופן ידני.

אחת הדרכים להשתמש בקודים חד-פעמיים היא ליצור מספרים אקראיים, כמפתחות בטבלה של מסד נתונים. לדוגמה, יכול להיות שיש לכם סטטוס בהמתנה לאימות למשל:

מזהה משתמש תוקף הרישיון
123456789... 1234 2017-3-14 1:59

אפשר להשתמש במזהה בקידוד base32 כקוד חד-פעמי.

חישוב מחרוזת ה-hash של האפליקציה

מערכת Google Play Services משתמשת במחרוזת הגיבוב (hash) כדי לקבוע איזה אימות הודעות שנשלחות לאפליקציה. מחרוזת הגיבוב (hash) מורכבת משם החבילה של האפליקציה ובאישור המפתח הציבורי של האפליקציה שלכם. כדי ליצור את מחרוזת הגיבוב:

  1. אם אתם משתמשים בחתימת אפליקציות דרך Google Play, הורדת האישור של חתימת האפליקציה (deployment_cert.der) מ הקטע חתימת אפליקציה במסוף Google Play.

    לאחר מכן, מייבאים את האישור של חתימת האפליקציה למאגר מפתחות זמני:

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

    אם חותמים על חבילות ה-APK ישירות, אפשר לדלג על השלב הזה.

  2. מקבלים את האישור של חתימת האפליקציה – האישור שייבאתם למעלה או הקוד שבו משתמשים כדי לחתום ישירות על חבילות ה-APK — כמחרוזת הקסדצימלית קטנה.

    לדוגמה, כדי לקבל את המחרוזת ההקסדתית ממאגר המפתחות הזמני שנוצר למעלה, מקלידים את הפקודה הבאה:

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

    אם חותמים על חבילות ה-APK ישירות, מציינים את מאגר המפתחות של סביבת הייצור וגם כינוי האישור.

  3. אם יצרתם מאגר מפתחות זמני, צריך למחוק אותו.

  4. מוסיפים את המחרוזת ההקסדצימלית לשם החבילה של האפליקציה, ומפרידים באמצעות מחרוזת אחת המרחב המשותף.

  5. מחשבים את סכום SHA-256 של המחרוזת המשולבת. חשוב להסיר רווח לבן בהתחלה או בסוף של המחרוזת לפני חישוב ה-SHA-256 סכום.

  6. מקודדים ב-Base64 את הערך הבינארי של הסכום SHA-256. יכול להיות שיהיה צורך בפענוח קוד סכום SHA-256 מפורמט הפלט שלו קודם.

  7. מחרוזת הגיבוב (hash) של האפליקציה היא 11 התווים הראשונים בקידוד base64 לבצע גיבוב (hash).

הפקודה הבאה מחשבת את מחרוזת הגיבוב (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 רטריבר. אבל, אם אתם משתמשים בכיתת העוזרים, חשוב להסיר אותו מהאפליקציה אחרי שמקבלים את מחרוזת הגיבוב (hash). אל תשתמשו גיבוב (hash) של מחרוזות שמחושבים באופן דינמי אצל הלקוח בהודעות האימות.

2. שליחת הודעת האימות ב-SMS

אחרי שיוצרים את הודעת האימות, שולחים את ההודעה לחשבון מספר טלפון באמצעות כל מערכת SMS.

לדוגמה, למידע נוסף, ראו אימות אפליקציות באמצעות Twilio SMS באתר המפתחים של Twilio.

כשהמכשיר של המשתמש מקבל את ההודעה הזו, ההודעה מועברת אל אפליקציה. האפליקציה מחלצת את הקוד החד-פעמי ושולחת אותו חזרה לשרת אל להשלים את תהליך האימות.

3. אימות הקוד החד-פעמי אחרי שהוא מוחזר

לשרת לאימות מספרי טלפון בדרך כלל יש נקודת קצה שנייה שבה הוא משתמש כדי לקבל קודים חד-פעמיים מאפליקציות לקוח. כשהשרת שלכם מקבל בקוד החד-פעמי מהאפליקציה בנקודת הקצה הזו, צריך לבצע את הפעולות הבאות:

  1. מוודאים שהקוד החד-פעמי תקף ושלא פג תוקפו.
  2. תיעוד שהמשתמש שמקושר לקוד החד-פעמי השלים את מספר הטלפון אימות.
  3. להסיר את רשומת מסד הנתונים של הקוד החד-פעמי, או לוודא באופן אחר כך שלא ניתן להשתמש בו שוב.

כשמתעדים את סטטוס האימות של המשתמש ומסירים קוד חד-פעמי מ- מסד הנתונים שלכם, האימות הושלם.