要自动验证电话号码,您必须同时实现客户端和 验证流程的服务器部分。本文档介绍了如何 实施服务器部分
电话验证服务器负责以下三项任务:
- 构建包含一次性验证码且 客户端 SMS Retriever API 期望的格式
- 将验证消息发送到用户的设备
- 在将一次性代码发送回服务器并完成 您的后端需要的任何验证后任务
您的应用与服务器交互的具体方式由您自己决定。常见 方法是公开具有两个端点的 REST API: 验证指定的电话号码并发送短信验证讯息,以及 第二个端点,用于从您的应用接收一次性代码。
1. 构建验证消息
当您的服务器收到验证电话号码的请求时,首先构建 您将发送到用户设备的验证消息。此消息 必须:
- 长度不超过 140 个字节
- 包含客户端发送回您的服务器的一次性代码, 请完成验证流程(请参阅 生成一次性代码)
- 加入用于标识您的应用的 11 个字符的哈希字符串(请参阅 计算应用的哈希字符串)
否则,验证邮件的内容可以是您选择的任何内容。 创建一封邮件,以便轻松从中提取一次性数据 代码。例如,有效的验证消息可能类似于 以下:
Your ExampleApp code is: 123ABC78FA+9qCX9VSu
生成一次性代码
您可以通过多种方式实施一次性代码,只要代码 无法猜测,您可以在客户访问代码时将代码与用户或电话号码关联起来 应用将其发送回您的服务器。代码应易于输入、 以适应任何可能需要用户手动输入代码的情况。
实现一次性代码的一种方法就是生成随机数 作为数据库表中的键例如,您的网页上可能存在 PendingVerifications。 如下所示:
ID | 用户 | 到期日期 |
---|---|---|
123456789... | 1234 | 2017 年 3 月 14 日 1:59 |
您可以将 base32 编码的 ID 用作一次性代码。
计算应用的哈希字符串
Google Play 服务使用哈希字符串来确定 要发送给您应用的消息该哈希字符串由应用的软件包名称组成 以及应用的公钥证书。如需生成哈希字符串,请执行以下操作:
如果您使用 Google Play 应用签名, 从以下位置下载您的应用签名证书 (
deployment_cert.der
): Google Play 管理中心的应用签名部分。然后,将应用签名证书导入一个临时密钥库:
keytool -importcert -file deployment_cert.der -keystore temporary.keystore -alias PlayDeploymentCert
如果您直接为 APK 签名,请跳过此步骤。
获取您的应用签名证书(可以使用您之前导入的证书,或者 您用于直接签署 APK 的名称(采用小写十六进制字符串的形式)。
例如,要从创建的临时密钥库中获取十六进制字符串 请输入以下命令:
keytool -exportcert -keystore temporary.keystore -alias PlayDeploymentCert | xxd -p | tr -d "[:space:]"
如果您直接为 APK 签名,请指定正式版密钥库,并 证书别名。
如果您创建了临时密钥库,请将其删除。
将十六进制字符串附加到应用的软件包名称,并以单个 空间。
计算组合字符串的 SHA-256 总和。请务必移除 在计算 SHA-256 之前字符串中的前导或尾随空格 求和。
对 SHA-256 总和的二进制值进行 Base64 编码。您可能需要解码 输出格式中的 SHA-256 总和。
应用的哈希字符串是 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. 在收到一次性验证码时对其进行验证
电话号码验证服务器通常具有第二个端点 从客户端应用接收一次性验证码。当您的服务器收到一个 从您的应用在此端点上传一次性代码,请执行以下操作:
- 验证该一次性代码是否有效且未过期。
- 用于记录与一次性代码关联的用户已填写电话号码 验证。
- 移除一次性代码的数据库记录,或通过其他方式确保 同一代码不能再次使用。
当您记录用户的验证状态并从 您的数据库,即表示验证已完成。