在伺服器上執行簡訊驗證

如要自動驗證電話號碼,您必須同時實作驗證流程的用戶端和伺服器部分。本文說明如何實作伺服器部分。

電話驗證伺服器會負責處理以下三項工作:

  1. 建構包含一次性代碼的驗證訊息,且其格式是用戶端 SMS Retriever API 預期的格式
  2. 將驗證訊息傳送至使用者的裝置
  3. 在代碼傳回伺服器時驗證一次性代碼,並完成後端所需的任何驗證後工作

您可以自行決定應用程式與伺服器的互動方式。常見的做法是公開具有兩個端點的 REST API:一個端點可接收驗證特定電話號碼的要求,並傳送簡訊驗證訊息,另一個端點則會從應用程式接收一次性代碼。

1. 建立驗證訊息

當您的伺服器收到驗證電話號碼的要求時,請先建構驗證訊息會傳送至使用者的裝置。這則訊息必須:

否則,你可以自由選擇驗證訊息的內容。 建立訊息有助於建立日後方便,日後輕鬆擷取一次性程式碼的訊息。例如,有效的驗證訊息可能如下所示:

Your ExampleApp code is: 123ABC78

FA+9qCX9VSu

產生一次性代碼

您可以透過許多方式實作一次性代碼,前提是這些代碼可以保存,而且當用戶端應用程式將代碼傳回回伺服器時,您可以將這些代碼連結至使用者或電話號碼。您應讓程式碼變得易於輸入,以便因應任何可能需要使用者手動輸入程式碼的情況。

實作一次性代碼的其中一種方式是產生隨機號碼,然後將這些數字做為資料庫資料表中的索引鍵。例如,您可能會有一個如下的 PendingVerifications 表格:

ID 使用者 效期
123456789... 1234 2017 年 3 月 14 日 1:59

您可以使用 Base32 編碼的 ID 做為一次性代碼。

計算應用程式的雜湊字串

Google Play 服務會使用雜湊字串決定要傳送至應用程式的驗證訊息。這組雜湊字串是由應用程式的套件名稱和應用程式公用金鑰憑證所組成。如何產生雜湊字串:

  1. 如果您使用 Google Play 應用程式簽署,請從 Google Play 管理中心的「應用程式簽署」部分下載應用程式簽署憑證 (deployment_cert.der)。

    接著,將應用程式簽署憑證匯入臨時金鑰存放區:

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

    如果您直接簽署 APK,請略過這個步驟。

  2. 取得應用程式簽署憑證 (您在上方匯入的憑證,或直接用來簽署 APK 的憑證) 作為小寫的十六進位字串。

    舉例來說,如要從上述步驟建立的臨時 KeyStore 取得十六進位字串,請輸入以下指令:

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

    如果您直接簽署 APK,請指定正式版 KeyStore 和憑證別名。

  3. 如果您建立了臨時 KeyStore,請刪除該 KeyStore。

  4. 請將十六進位字串附加至應用程式的套件名稱,並以一個空格分隔。

  5. 計算合併字串的 SHA-256 總和。計算 SHA-256 總和前,請務必移除字串中任何開頭或結尾的空白字元。

  6. 使用 Base64 編碼 SHA-256 總和的二進位值。您可能需要先將輸出格式的 SHA-256 總和解碼。

  7. 應用程式的雜湊字串是採用 Base64 編碼的雜湊值前 11 個字元。

下列指令會計算應用程式正式版 KeyStore 中的雜湊字串:

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 類別,取得應用程式的雜湊字串。不過,如果您使用輔助類別,請務必在取得雜湊字串後,將其從應用程式中移除。請勿在驗證訊息中使用在用戶端動態計算的雜湊字串。

2. 透過簡訊傳送驗證訊息

建構驗證訊息後,請利用任何簡訊系統傳送訊息至使用者的電話號碼。

例如,請參閱 Twilio 開發人員網站的「使用 Twilio SMS 驗證應用程式」。

使用者的裝置收到這則訊息時,系統會將訊息導向至您的應用程式。應用程式會擷取一次性代碼,並將代碼傳回伺服器來完成驗證程序。

3. 在退貨時驗證一次性驗證碼

電話號碼驗證伺服器通常具有第二個端點,用來接收用戶端應用程式傳回的一次性代碼。當您的伺服器在此端點收到應用程式傳送的一次性程式碼時,請執行下列步驟:

  1. 確認動態驗證碼是否有效且尚未過期。
  2. 一次性驗證碼所連結的使用者已完成電話號碼驗證。
  3. 移除一次性程式碼的資料庫記錄,或是以其他方式確保不能再次使用相同的程式碼。

只要您記錄使用者的驗證狀態,並從資料庫中移除一次性代碼,即可完成驗證程序。