在伺服器上執行簡訊驗證

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

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

電話驗證伺服器有三個工作:

  1. 建構包含一次性代碼的驗證訊息,並採用用戶端簡訊擷取器 API 的格式
  2. 將驗證訊息傳送到使用者的裝置
  3. 在驗證代碼

應用程式與伺服器互動的具體細節由您決定。常見的做法是使用兩個端點公開 REST API:一個用於接收指定電話號碼並傳送 SMS 驗證訊息的要求,第二個則是從應用程式接收一次性代碼的端點。

1. 建構驗證訊息

您的伺服器收到驗證電話號碼的要求時,請先建立驗證訊息並傳送給使用者的裝置。此訊息必須:

否則驗證訊息的內容取決於您選擇的任何選項。 建議您建立訊息,以便日後輕鬆擷取一次性代碼。例如,有效的驗證訊息可能如下所示:

Your ExampleApp code is: 123ABC78

FA+9qCX9VSu

產生一次性代碼

只要程式碼無法分辨,您也可以透過多種方式實作一次性代碼,而當用戶端應用程式將代碼傳回您的伺服器時,您可以將代碼連結至使用者或電話號碼。建議您以容易辨識的方式輸入代碼,以因應使用者可能需要手動輸入代碼的情況。

實作一次性代碼的其中一種方法,就是在資料庫資料表中做為隨機號碼使用。例如,您可能有類似 PendingVerifications 資料表:

ID 使用者 效期
123456789... 1234 2017-3-14 1:59

您可以使用 base32 編碼的一次性代碼。

計算應用程式的雜湊字串

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,請將其刪除。

  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 簡訊進行應用程式驗證

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

3. 請在收到驗證碼後驗證一次性代碼

電話號碼驗證伺服器通常有第二個端點,該端點用來從用戶端應用程式接收一次性代碼。您的伺服器會透過此端點從應用程式收到一次性代碼時,請執行以下操作:

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

當您記錄使用者的驗證狀態,並從資料庫中移除一次性代碼時,驗證程序就會完成。