在伺服器上執行簡訊驗證

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

電話驗證伺服器負責執行以下三項工作:

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

您可以自行決定應用程式與伺服器的互動方式。常見的 都是透過兩個端點公開 REST API:其中一個端點收到要求 驗證指定電話號碼,並傳送 SMS 驗證訊息。 接收來自應用程式的一次性代碼。

1. 建構驗證訊息

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

否則,您可以選擇任何選項顯示驗證郵件內容。 建立訊息,有助於輕鬆擷取一次性訊息 稍後將介紹程式碼舉例來說,有效的驗證訊息可能為 包括:

Your ExampleApp code is: 123ABC78

FA+9qCX9VSu

產生一次性程式碼

您可以用多種方式導入一次性代碼, 而且在用戶端進行操作時,您可以將代碼連結至使用者或電話號碼。 應用程式會將圖片傳回您的伺服器建議您讓代碼易於輸入 適應任何可能需要使用者手動輸入代碼的情況。

實作一次性代碼的方法之一是產生隨機數字,以 做為索引鍵例如「待處理驗證」 如下所示:

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

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

計算應用程式的雜湊字串

Google Play 服務會使用雜湊字串判斷哪些驗證方式 要傳送到應用程式的訊息雜湊字串由應用程式的套件名稱組成 以及應用程式的公用金鑰憑證如何產生雜湊字串:

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

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

    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 取得應用程式的雜湊字串 來自 SMS 擷取器範例應用程式的類別。不過,如果您使用 helper 類別 取得雜湊字串後,請務必從應用程式中移除這個字串。請勿使用 在驗證郵件中,由用戶端動態計算的雜湊字串。

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

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

舉例來說,請參閱使用 Twilio SMS 驗證應用程式。 造訪 Twilio 開發人員網站

使用者的裝置收到這則訊息後,系統會將該訊息傳送給您的 應用程式。應用程式會擷取一次性程式碼,然後傳回伺服器, 完成驗證程序

3. 在系統傳回動態驗證碼時進行驗證

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

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

記錄使用者的驗證狀態並從 資料庫,驗證已完成