تایید SMS را روی سرور انجام دهید

برای تأیید خودکار شماره تلفن، باید هر دو بخش سرویس گیرنده و سرور جریان تأیید را پیاده سازی کنید. این سند نحوه پیاده سازی بخش سرور را توضیح می دهد.

سرور تأیید تلفن مسئول سه کار است:

  1. ساخت یک پیام تأیید شامل یک کد یکبار مصرف و فرمت مورد انتظار SMS Retriever سمت سرویس گیرنده
  2. ارسال پیام تأیید به دستگاه کاربر
  3. تأیید کد یکبار مصرف هنگام ارسال مجدد به سرور و تکمیل هر گونه کار پس از تأیید مورد نیاز باطن شما

جزئیات نحوه تعامل برنامه شما با سرور به شما بستگی دارد. یک رویکرد رایج، افشای یک REST API با دو نقطه پایانی است: یکی که درخواست‌هایی را برای تأیید یک شماره تلفن مشخص دریافت می‌کند و پیام‌های تأیید SMS را ارسال می‌کند، و نقطه پایانی دوم که کدهای یکبار مصرف را از برنامه شما دریافت می‌کند.

1. یک پیام تأیید بسازید

هنگامی که سرور شما درخواستی برای تأیید شماره تلفن دریافت می کند، ابتدا پیام تأییدی را که به دستگاه کاربر ارسال می کنید بسازید. این پیام باید:

در غیر این صورت، محتویات پیام تأیید می تواند هر چیزی باشد که شما انتخاب می کنید. ایجاد پیامی که بعداً بتوانید به راحتی کد یکبار مصرف را از آن استخراج کنید مفید است. به عنوان مثال، یک پیام تأیید معتبر ممکن است به شکل زیر باشد:

Your ExampleApp code is: 123ABC78

FA+9qCX9VSu

تولید کد یکبار مصرف

می‌توانید کدهای یک‌بار مصرف را به روش‌های مختلف پیاده‌سازی کنید، تا زمانی که کدها غیرقابل حدس زدن باشند و زمانی که برنامه مشتری آن‌ها را به سرور شما ارسال می‌کند، می‌توانید کدها را به یک کاربر یا شماره تلفن پیوند دهید. باید کدها را برای تایپ کردن آسان کنید تا با هر موقعیتی که ممکن است نیاز باشد کاربران به صورت دستی کد را تایپ کنند، تطبیق داده شود.

یکی از راه‌های پیاده‌سازی کدهای یکبار مصرف، تولید اعداد تصادفی است که از آنها به عنوان کلید در جدول پایگاه داده استفاده می‌کنید. برای مثال، ممکن است یک جدول PendingVerifications مانند زیر داشته باشید:

شناسه کاربر انقضا
123456789... 1234 2017-3-14 1:59

می توانید از شناسه رمزگذاری شده با base32 به عنوان یک کد یکبار مصرف استفاده کنید.

در حال محاسبه رشته هش برنامه شما

سرویس‌های Google Play از رشته هش برای تعیین اینکه کدام پیام‌های تأیید را به برنامه شما ارسال کند، استفاده می‌کند. رشته هش از نام بسته برنامه شما و گواهی کلید عمومی برنامه شما ساخته شده است. برای تولید رشته هش:

  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. رشته هش برنامه شما 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 retriever دریافت کنید. با این حال، اگر از کلاس کمکی استفاده می کنید، پس از دریافت رشته هش، حتما آن را از برنامه خود حذف کنید. از رشته های هش که به صورت پویا روی کلاینت محاسبه شده اند در پیام های تأیید خود استفاده نکنید.

2. پیام تایید را از طریق پیامک ارسال کنید

پس از ساختن پیام تأیید، پیام را با استفاده از هر سیستم پیامکی به شماره تلفن کاربر ارسال کنید.

برای مثال، تأیید برنامه با استفاده از پیامک Twilio را در سایت توسعه دهنده Twilio ببینید.

هنگامی که دستگاه کاربر این پیام را دریافت می کند، پیام به برنامه شما هدایت می شود. برنامه شما کد یکبار مصرف را استخراج می کند و برای تکمیل فرآیند تأیید به سرور شما برمی گرداند.

3. پس از بازگرداندن کد یکبار مصرف، آن را تأیید کنید

سرور تأیید شماره تلفن معمولاً یک نقطه پایانی دوم دارد که از آن برای دریافت کدهای یکبار مصرف از برنامه های مشتری استفاده می کند. هنگامی که سرور شما یک کد یکبار مصرف از برنامه شما در این نقطه پایانی دریافت می کند، موارد زیر را انجام دهید:

  1. بررسی کنید که کد یکبار مصرف معتبر است و منقضی نشده است.
  2. ثبت کنید که کاربر پیوند داده شده به کد یکبار مصرف، تأیید شماره تلفن را تکمیل کرده است.
  3. رکورد پایگاه داده کد یکبار مصرف را حذف کنید، یا به روش دیگری اطمینان حاصل کنید که همان کد نمی تواند دوباره استفاده شود.

هنگامی که وضعیت تأیید کاربر را ثبت می کنید و کد یکبار مصرف را از پایگاه داده خود حذف می کنید، تأیید کامل می شود.