在服务器上执行短信验证

要自动验证电话号码,您必须同时实现客户端和 验证流程的服务器部分。本文档介绍了如何 实施服务器部分

电话验证服务器负责以下三项任务:

  1. 构建包含一次性验证码且 客户端 SMS Retriever API 期望的格式
  2. 将验证消息发送到用户的设备
  3. 在将一次性代码发送回服务器并完成 您的后端需要的任何验证后任务

您的应用与服务器交互的具体方式由您自己决定。常见 方法是公开具有两个端点的 REST API: 验证指定的电话号码并发送短信验证讯息,以及 第二个端点,用于从您的应用接收一次性代码。

1. 构建验证消息

当您的服务器收到验证电话号码的请求时,首先构建 您将发送到用户设备的验证消息。此消息 必须:

  • 长度不超过 140 个字节
  • 包含客户端发送回您的服务器的一次性代码, 请完成验证流程(请参阅 生成一次性代码
  • 加入用于标识您的应用的 11 个字符的哈希字符串(请参阅 计算应用的哈希字符串

否则,验证邮件的内容可以是您选择的任何内容。 创建一封邮件,以便轻松从中提取一次性数据 代码。例如,有效的验证消息可能类似于 以下:

Your ExampleApp code is: 123ABC78

FA+9qCX9VSu

生成一次性代码

您可以通过多种方式实施一次性代码,只要代码 无法猜测,您可以在客户访问代码时将代码与用户或电话号码关联起来 应用将其发送回您的服务器。代码应易于输入、 以适应任何可能需要用户手动输入代码的情况。

实现一次性代码的一种方法就是生成随机数 作为数据库表中的键例如,您的网页上可能存在 PendingVerifications。 如下所示:

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 的名称(采用小写十六进制字符串的形式)。

    例如,要从创建的临时密钥库中获取十六进制字符串 请输入以下命令:

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

    如果您直接为 APK 签名,请指定正式版密钥库,并 证书别名。

  3. 如果您创建了临时密钥库,请将其删除。

  4. 将十六进制字符串附加到应用的软件包名称,并以单个 空间。

  5. 计算组合字符串的 SHA-256 总和。请务必移除 在计算 SHA-256 之前字符串中的前导或尾随空格 求和。

  6. 对 SHA-256 总和的二进制值进行 Base64 编码。您可能需要解码 输出格式中的 SHA-256 总和。

  7. 应用的哈希字符串是 base64 编码的前 11 个字符 哈希值。

以下命令从应用的正式版中计算哈希字符串 密钥库:

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 SMS 进行应用验证

当用户的设备收到此消息时,系统会将该消息发送至您的 应用。您的应用提取该一次性代码并将其发送回您的服务器 完成验证流程。

3. 在收到一次性验证码时对其进行验证

电话号码验证服务器通常具有第二个端点 从客户端应用接收一次性验证码。当您的服务器收到一个 从您的应用在此端点上传一次性代码,请执行以下操作:

  1. 验证该一次性代码是否有效且未过期。
  2. 用于记录与一次性代码关联的用户已填写电话号码 验证。
  3. 移除一次性代码的数据库记录,或通过其他方式确保 同一代码不能再次使用。

当您记录用户的验证状态并从 您的数据库,即表示验证已完成。