如要自動驗證電話號碼,您必須執行驗證流程的用戶端和伺服器部分。本文件將說明如何實作伺服器部分。
電話驗證伺服器有三個工作:
- 建構包含一次性代碼的驗證訊息,並採用用戶端簡訊擷取器 API 的格式
- 將驗證訊息傳送到使用者的裝置
- 在驗證代碼
應用程式與伺服器互動的具體細節由您決定。常見的做法是使用兩個端點公開 REST API:一個用於接收指定電話號碼並傳送 SMS 驗證訊息的要求,第二個則是從應用程式接收一次性代碼的端點。
1. 建構驗證訊息
您的伺服器收到驗證電話號碼的要求時,請先建立驗證訊息並傳送給使用者的裝置。此訊息必須:
- 不得超過 140 個位元組
- 包含用戶端傳回您的伺服器以完成驗證流程的一次性代碼 (請參閱產生一次性代碼)
- 加入用於識別應用程式的 11 個字元雜湊字串 (請參閱「計算應用程式的雜湊字串」)
否則驗證訊息的內容取決於您選擇的任何選項。 建議您建立訊息,以便日後輕鬆擷取一次性代碼。例如,有效的驗證訊息可能如下所示:
Your ExampleApp code is: 123ABC78FA+9qCX9VSu
產生一次性代碼
只要程式碼無法分辨,您也可以透過多種方式實作一次性代碼,而當用戶端應用程式將代碼傳回您的伺服器時,您可以將代碼連結至使用者或電話號碼。建議您以容易辨識的方式輸入代碼,以因應使用者可能需要手動輸入代碼的情況。
實作一次性代碼的其中一種方法,就是在資料庫資料表中做為隨機號碼使用。例如,您可能有類似 PendingVerifications 資料表:
ID | 使用者 | 效期 |
---|---|---|
123456789... | 1234 | 2017-3-14 1:59 |
您可以使用 base32 編碼的一次性代碼。
計算應用程式的雜湊字串
Google Play 服務會使用雜湊字串來判斷要傳送到應用程式的驗證訊息。雜湊字串是由應用程式的套件名稱和應用程式的公用金鑰憑證組成。如何產生雜湊字串:
如果您使用 Google Play 應用程式簽署,請前往 Google Play 管理中心的應用程式簽署部分,下載您的應用程式簽署憑證 (
deployment_cert.der
)。接著,將應用程式簽署憑證匯入臨時金鑰存放區:
keytool -importcert -file deployment_cert.der -keystore temporary.keystore -alias PlayDeploymentCert
如果您直接簽署 APK,請略過這個步驟。
取得應用程式簽署憑證 (無論您在上方匯入的憑證,或是直接用於簽署 APK 的憑證),都會以小寫十六進位字串的形式呈現。
例如,如要從上述建立的臨時 KeyStore 取得十六進位字串,請輸入下列指令:
keytool -exportcert -keystore temporary.keystore -alias PlayDeploymentCert | xxd -p | tr -d "[:space:]"
如果您直接簽署 APK,請指定正式版 KeyStore 和憑證別名。
如果您建立了臨時 KeyStore,請將其刪除。
將十六進位字串附加到應用程式的套件名稱中,並以一個空格分隔。
計算合併字串的 SHA-256 總和。在計算 SHA-256 總和之前,請務必從字串中移除任何開頭或結尾的空白字元。
使用 Base64 編碼的 SHA-256 總和值。您可能需要先將 SHA-256 總和解碼從輸出格式解碼。
應用程式的雜湊字串是 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. 請在收到驗證碼後驗證一次性代碼
電話號碼驗證伺服器通常有第二個端點,該端點用來從用戶端應用程式接收一次性代碼。您的伺服器會透過此端點從應用程式收到一次性代碼時,請執行以下操作:
- 確認一次性代碼是否有效且尚未過期。
- 記錄連結至一次性代碼的使用者已完成電話號碼驗證。
- 移除一次性程式碼資料庫記錄,或以其他方式確保相同程式碼無法再次使用。
當您記錄使用者的驗證狀態,並從資料庫中移除一次性代碼時,驗證程序就會完成。