Executar verificação de SMS em um servidor

Para verificar automaticamente os números de telefone, você deve implementar as partes do cliente e do servidor do fluxo de verificação. Este documento descreve como implementar a parte do servidor.

O servidor de verificação de telefone é responsável por três tarefas:

  1. Construir uma mensagem de verificação que inclui um código único e tem o formato que a API do SMS Retriever do lado do cliente espera
  2. Enviando a mensagem de verificação para o dispositivo do usuário
  3. Verificar o código único quando ele é enviado de volta ao servidor e concluir todas as tarefas de pós-verificação exigidas pelo back-end

As especificações de como seu aplicativo interage com o servidor dependem de você. Uma abordagem comum é expor uma API REST com dois endpoints: um que recebe solicitações para verificar um determinado número de telefone e envia as mensagens de verificação por SMS, e um segundo endpoint que recebe códigos únicos de seu aplicativo.

1. Construir uma mensagem de verificação

Quando o seu servidor receber uma solicitação para verificar um número de telefone, primeiro crie a mensagem de verificação que você enviará ao dispositivo do usuário. Esta mensagem deve:

Caso contrário, o conteúdo da mensagem de verificação pode ser o que você escolher. É útil criar uma mensagem da qual você possa facilmente extrair o código único posteriormente. Por exemplo, uma mensagem de verificação válida pode ter a seguinte aparência:

Your ExampleApp code is: 123ABC78

FA+9qCX9VSu

Gerando um código único

Você pode implementar códigos únicos de várias maneiras, contanto que os códigos não possam ser adivinhados e você possa vinculá-los a um usuário ou número de telefone quando o aplicativo cliente os enviar de volta ao servidor. Você deve tornar os códigos fáceis de digitar para acomodar quaisquer situações que possam exigir que os usuários digitem o código manualmente.

Uma maneira de implementar códigos únicos é gerar números aleatórios, que você usa como chaves em uma tabela de banco de dados. Por exemplo, você pode ter uma tabela PendingVerifications como a seguinte:

EU IA Do utilizador Vencimento
123456789 ... 1234 14/03/2017 1:59

Você pode usar o ID codificado em base32 como um código único.

Calculando a string hash do seu aplicativo

O Google Play Services usa a string hash para determinar quais mensagens de verificação enviar para seu aplicativo. A string hash é composta pelo nome do pacote do seu aplicativo e pelo certificado de chave pública do seu aplicativo. Para gerar a string hash:

  1. Se você usa a assinatura de aplicativo do Google Play , baixe seu certificado de assinatura de aplicativo ( deployment_cert.der ) da seção de assinatura de aplicativo do console do Google Play .

    Em seguida, importe o certificado de assinatura do aplicativo para um armazenamento de chaves temporário:

    keytool -importcert -file deployment_cert.der -keystore temporary.keystore -alias PlayDeploymentCert
    

    Se você assinar seus APKs diretamente, pule esta etapa.

  2. Obtenha o certificado de assinatura do seu app - aquele que você importou acima ou aquele que você usa para assinar seus APKs diretamente - como uma string hexadecimal em minúsculas.

    Por exemplo, para obter a string hexadecimal do armazenamento de chaves temporário criado acima, digite o seguinte comando:

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

    Se você assinar seus APKs diretamente, especifique seu armazenamento de chaves de produção e o alias de certificado.

  3. Se você criou um keystore temporário, exclua-o.

  4. Anexe a string hexadecimal ao nome do pacote do seu aplicativo, separado por um único espaço.

  5. Calcule a soma SHA-256 da string combinada. Certifique-se de remover qualquer espaço em branco à esquerda ou à direita da string antes de calcular a soma SHA-256.

  6. Codifique em Base64 o valor binário da soma SHA-256. Você pode precisar decodificar a soma SHA-256 de seu formato de saída primeiro.

  7. A string hash do seu aplicativo são os primeiros 11 caracteres do hash codificado em base64.

O comando a seguir calcula a string hash do armazenamento de chaves de produção do seu aplicativo:

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

Como alternativa, você pode obter a string hash do seu aplicativo com a classe AppSignatureHelper do aplicativo de amostra de recuperação de SMS. No entanto, se você usar a classe auxiliar, certifique-se de removê-la do aplicativo depois de obter a string hash. Não use strings hash calculadas dinamicamente no cliente em suas mensagens de verificação.

2. Envie a mensagem de verificação por SMS

Depois de construir a mensagem de verificação, envie a mensagem para o número de telefone do usuário usando qualquer sistema SMS.

Por exemplo, consulte Verificação de aplicativo usando Twilio SMS no site de desenvolvedor do Twilio.

Quando o dispositivo do usuário recebe esta mensagem, a mensagem é direcionada ao seu aplicativo. Seu aplicativo extrai o código único e o envia de volta ao servidor para concluir o processo de verificação.

3. Verifique o código único quando for devolvido

Um servidor de verificação de número de telefone normalmente tem um segundo ponto de extremidade que usa para receber códigos únicos de volta de aplicativos cliente. Quando seu servidor receber um código único de seu aplicativo neste endpoint, faça o seguinte:

  1. Verifique se o código de uso único é válido e não expirou.
  2. Registre que o usuário vinculado ao código único concluiu a verificação do número de telefone.
  3. Remova o registro do banco de dados do código ocasional ou, de alguma outra forma, certifique-se de que o mesmo código não possa ser usado novamente.

Quando você registra o status de verificação do usuário e remove o código único de seu banco de dados, a verificação é concluída.