إثبات الملكية عبر الرسائل القصيرة SMS على أحد الخوادم

لإثبات ملكية أرقام الهواتف تلقائيًا، يجب تنفيذ جزءي العميل والخادم من عملية إثبات الملكية. يصف هذا المستند كيفية تنفيذ جزء الخادم.

يكون خادم التحقق من الهاتف مسؤولاً عن ثلاث مهام:

  1. إنشاء رسالة تحقق تتضمن رمزًا لمرة واحدة ويكون بالتنسيق الذي تتوقعه واجهة برمجة تطبيقات SMS فهو من جهة العميل
  2. إرسال رسالة التحقق إلى جهاز المستخدم
  3. التحقق من الرمز لمرة واحدة عند إرساله مرة أخرى إلى الخادم وإكمال أي مهام تطلبها الواجهة الخلفية بعد التحقق

يعود إليك تحديد تفاصيل كيفية تفاعل تطبيقك مع الخادم. وهناك أسلوب شائع يتمثل في عرض واجهة برمجة تطبيقات REST مع نقطتَي نهاية: إحداهما تتلقى طلبات لإثبات ملكية رقم هاتف معيّن وترسل رسائل التحقق عبر الرسائل القصيرة SMS، ونقطة نهاية ثانية تتلقى رموزًا لمرة واحدة من تطبيقك.

1- إنشاء رسالة تحقق

عندما يتلقى الخادم طلبًا للتحقق من رقم هاتف، أنشئ أولاً رسالة التحقق التي سترسلها إلى جهاز المستخدم. يجب أن تساعد هذه الرسالة في:

وبخلاف ذلك، يمكنك اختيار محتوى رسالة إثبات الملكية حسب اختيارك. من المفيد إنشاء رسالة يمكنك من خلالها استخراج الرمز لمرة واحدة بسهولة لاحقًا. على سبيل المثال، قد تظهر رسالة التحقق الصالحة على النحو التالي:

Your ExampleApp code is: 123ABC78

FA+9qCX9VSu

إنشاء رمز يُستخدم لمرة واحدة

يمكنك تنفيذ الرموز لمرة واحدة بعدة طرق، طالما أن الرموز لا يمكن تخمينها، ويمكنك ربط الرموز بمستخدم أو رقم هاتف عندما يرسلها تطبيق العميل مرة أخرى إلى خادمك. يجب أن تسهل كتابة الأكواد، لاستيعاب أي مواقف قد تتطلب من المستخدمين كتابة الكود يدويًا.

تتمثل إحدى طرق تنفيذ الرموز لمرة واحدة في إنشاء أرقام عشوائية تستخدمها كمفاتيح في جدول قاعدة بيانات. على سبيل المثال، قد يكون لديك جدول Pendingتحقَّقs من الجدول كما يلي:

رقم التعريف المستخدِم انتهاء الصلاحية
123456789... 1234 2017-3-14 1:59

يمكنك استخدام رقم التعريف بترميز base32 كرمز لمرة واحدة.

حساب سلسلة التجزئة الخاصة بتطبيقك

تستخدم "خدمات Google Play" سلسلة التجزئة لتحديد رسائل التحقق التي يجب إرسالها إلى تطبيقك. تتكوّن سلسلة التجزئة من اسم حزمة التطبيق وشهادة المفتاح العام للتطبيق. لإنشاء سلسلة التجزئة:

  1. إذا كنت تستخدم ميزة توقيع التطبيق من Google Play، نزِّل شهادة توقيع التطبيق (deployment_cert.der) من قسم توقيع التطبيق في Google Play Console.

    بعد ذلك، عليك استيراد شهادة توقيع التطبيق إلى ملف تخزين مؤقت:

    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. سلسلة التجزئة لتطبيقك هي أول 11 حرفًا من التجزئة المشفرة بتشفير base64.

يحسب الأمر التالي سلسلة التجزئة من ملف تخزين المفاتيح لإنتاج تطبيقك:

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 الإلكتروني للمطوّرين.

عندما يتلقّى جهاز المستخدم هذه الرسالة، يتم توجيهها إلى تطبيقك. يستخرج تطبيقك الرمز لمرة واحدة ويرسله مرة أخرى إلى خادمك لإكمال عملية إثبات الملكية.

3. التحقّق من الرمز لمرة واحدة عند إرجاعه

يحتوي خادم التحقق من رقم الهاتف عادةً على نقطة نهاية ثانية يستخدمها لاستقبال رموز لمرة واحدة من تطبيقات العميل. عندما يتلقّى خادمك رمزًا لمرة واحدة من تطبيقك في نقطة النهاية هذه، عليك تنفيذ ما يلي:

  1. تأكَّد من أنّ الرمز الذي يُستخدم لمرة واحدة صالح وغير منتهي الصلاحية.
  2. سجِّل أنّ المستخدم المرتبط بالرمز لمرة واحدة قد أكمل عملية إثبات ملكية رقم الهاتف.
  3. قم بإزالة سجل قاعدة بيانات التعليمات البرمجية لمرة واحدة، أو بطريقة أخرى تأكد من عدم استخدام نفس التعليمة البرمجية مرة أخرى.

عند تسجيل حالة إثبات هوية المستخدم وإزالة رمز يُستخدم لمرة واحدة من قاعدة البيانات، تكتمل عملية إثبات الملكية.