O blog da AWS

Migração para a autenticação baseada em tokens para aplicativos iOS com o Amazon SNS

Por Yashlin Naidoo, engenheiro de suporte
 

O Amazon Simple Notification Service (Amazon SNS) permite que você envie notificações diretamente para um endpoint push móvel. Para aplicativos iOS, o Amazon SNS envia a notificação em nome do seu aplicativo para o serviço Apple Push Notification (APNs).

Para enviar notificações push móveis via Amazon SNS, você deve fornecer um conjunto de credenciais para se conectar aos APNs (consulte Pré-requisitos para notificações de usuários do Amazon SNS).

O Amazon SNS oferece suporte a dois métodos de autenticação com endpoints push móveis iOS ao enviar uma notificação push móvel por meio dos APNs:

  • Autenticação baseada em certificado
  • Autenticação baseada em tokens

Para usar a autenticação baseada em certificado, você deve configurar o Amazon SNS com um certificado do seu provedor. O Amazon SNS usará esse certificado em seu nome para estabelecer uma conexão segura com os APNs para enviar suas notificações push móveis. Para cada aplicativo ao qual você oferece suporte, você precisará fornecer certificados exclusivos.

À medida que o número de aplicativos que você gerencia cresce, você também precisará criar e gerenciar um número cada vez maior de certificados. Além disso, os certificados expiram anualmente e você deve renová-los para garantir que o Amazon SNS possa continuar enviando notificações push móveis em seu nome. Para saber mais sobre como usar a autenticação baseada em certificados, consulte Autenticação baseada em certificados para aplicativos iOS com o Amazon SNS no blog de computação da AWS.

Para aplicativos iOS novos e existentes, recomendamos que você use a autenticação baseada em tokens. Para saber mais sobre como usar a autenticação baseada em tokens, consulte Autenticação baseada em tokens para aplicativos iOS com o Amazon SNS no blog de computação da AWS.

Há vários benefícios em usar a autenticação baseada em tokens:

  • Você pode usar um único token que é compartilhado entre todos os seus aplicativos.
  • Você pode eliminar a necessidade de renovação anual do certificado para autenticação baseada em certificado.
  • Você pode melhorar a segurança do seu aplicativo usando solicitações baseadas em tokens. Para essas solicitações, suas credenciais nunca são transferidas do Amazon SNS para seu provedor de notificação push móvel, tornando a comunicação menos provável de ser comprometida.

A autenticação baseada em tokens é o método de autenticação mais recente fornecido pelos APNs que melhora a segurança de seus aplicativos, exige menos esforço de gerenciamento e é mais eficiente. Recomendamos migrar o mais rápido possível para garantir a segurança e a facilidade de operação de seus aplicativos.

Este blog fornece instruções passo a passo para migrar seu aplicativo iOS da autenticação baseada em certificado para a autenticação baseada em token com o Amazon SNS. Você aprenderá a criar um novo token usando sua conta de desenvolvedor da Apple. Em seguida, você migrará seu aplicativo de plataforma para a autenticação baseada em tokens. Por fim, você testará seu aplicativo enviando uma notificação push de teste via Amazon SNS para um dispositivo para confirmar a migração bem-sucedida.

Pré-requisitos

  • IDE do XCode
  • Aplicativo iOS com um certificado p.12 válido

Antes de continuar com essa migração, recomendamos parar de enviar notificações push para seus aplicativos até que a migração seja concluída para evitar interrupções nas cargas de trabalho de entrega de mensagens.

Passo a passo

Você também pode criar um aplicativo de plataforma de teste com autenticação baseada em tokens para garantir que o aplicativo da plataforma Amazon SNS seja criado com sucesso. Por fim, você pode criar um token de dispositivo e enviar uma notificação push de teste para ele. Depois de confirmar que o aplicativo funciona corretamente, você pode migrar o aplicativo da plataforma principal para a autenticação baseada em tokens.

Criação de um token .p8 para fazer upload para o Amazon SNS

  1. Faça login na sua conta de desenvolvedor da Apple.
  2. Escolha certificados, identificadores e perfis.
  3. Na seção Teclas, escolha o botão Adicionar (+).
  4. Em Registrar uma nova chave, em Nome da chave, digite o nome da chave do token e marque a caixa do serviço Apple Push Notifications (APNs) para os principais serviços.
  5. Selecione Continuar.
  6. Na seção Registrar uma nova chave, verifique se todos os valores foram inseridos corretamente.
  7. Selecione Registrar para registrar a nova chave de token.
  8. Baixe sua chave simbólica. Guarde-o em um local seguro, pois você não poderá baixar a chave do token novamente.

Migrando seu aplicativo de plataforma da autenticação baseada em certificado para a autenticação baseada em token

  1. Navegue até o console do Amazon SNS. Expanda o menu Celular e escolha Notificação push.
  2. Escolha o aplicativo da sua plataforma.
  3. Escolha Editar. Na seção de credenciais da Apple, escolha Token:
    1. Em Token, selecione Escolher arquivo para carregar o arquivo de chave de token .p8.
    2. Forneça valores para ID da chave de assinatura, ID da equipe e ID do pacote. Esses valores podem ser encontrados na sua conta de desenvolvedor da Apple. Certifique-se de que seu ID do pacote seja idêntico ao ID usado para esse aplicativo com autenticação baseada em certificado.
  4. Notificações de eventos — opcional: consulte o guia a seguir para ativar as notificações de eventos: Eventos de aplicativos móveis
  5. Registro do status de entrega — opcional: consulte o guia a seguir para ativar o registro do status de entrega: Como faço para acessar os registros de entrega de tópicos do Amazon SNS para notificações push? Encontre mais informações sobre essas etapas nas melhores práticas de notificações push móveis.

Apple credential settings

6. Escolha Salvar alterações. Isso muda seu aplicativo de plataforma para autenticação baseada em tokens.

Testando a entrega de notificações push em seu dispositivo

Nesta seção, você testará o envio de uma notificação push para seu dispositivo usando o console do Amazon SNS e a Interface da Linha de Comando da AWS (AWS CLI).

Console Amazon SNS
  1. No console do Amazon SNS, navegue até o endpoint da sua plataforma e escolha Publicar mensagem.
  2. Para o corpo da mensagem, selecione Carga útil personalizada para cada protocolo de entrega a ser enviado ao endpoint. Este exemplo usa uma carga personalizada que permite que você forneça cabeçalhos de APNs adicionais:

Custom payload for each delivery model configuration

3. Escolha Publicar mensagem.

4. A notificação push é entregue ao seu dispositivo:

iOS sample notification message

CLI da AWS

Nota: Se você receber erros ao executar comandos do AWS CLI, certifique-se de estar usando a versão mais recente do AWS CLI.

Execute o comando a seguir.

Para target-arn, especifique o ARN do endpoint do aplicativo da plataforma:

aws sns publish \
    --target-arn arn:aws:sns:us-west-2:123456789123:endpoint/APNS_SANDBOX/computeblogdemo/ba7a35f8-c73d-364f-9edd-5c438add0533 \
    --message '{"APNS_SANDBOX": "{\"aps\":{\"alert\":\"Sample message for iOS development endpoints\"}}"}' \
    --message-attributes '{"AWS.SNS.MOBILE.APNS.PUSH_TYPE":{"DataType":"String","StringValue":"alert"}}' \
    --message-structure json
Bash
  1. Uma saída contendo um MessageId é mostrada em caso de entrega bem-sucedida:
    {
        "MessageId": "83ecb3a1-c728-5b7c-96e5-e8417d5cd4f4"
    }
    JSON
  2. A notificação push é entregue ao seu dispositivo:
    iOS sample notification message

Solução de problemas

Você pode encontrar vários erros ao migrar para a autenticação baseada em tokens. Esta seção explica como solucionar esses erros.

Se uma mensagem não for entregue após publicá-la no endpoint do aplicativo da plataforma, consulte os registros de falha do Amazon CloudWatch do aplicativo da plataforma. Esses registros são denominados sns/your-aws-region/your-accountID/app/platform_name/application_name/Failure.

Depois de navegar até o grupo de registros com falha do CloudWatch, clique em um dos fluxos de log com base na hora em que você publicou a mensagem. Concentre-se nos seguintes atributos:

  • StatusCode: as mensagens de erro são agrupadas de acordo com o código de status.
  • status: mostra se uma mensagem foi entregue com sucesso ao provedor ou se não foi entregue.
  • ProviderResponse: fornece a mensagem de resposta do provedor e só é exibida no caso de falha na entrega da mensagem.

Examinaremos as mensagens que não foram entregues devido aos seguintes erros:

Token de provedor inválido

"providerResponse": "{\"reason\":\"InvalidProviderToken\"}",
"statusCode": 403,
"status": "FAILURE"

A causa desse erro pode ser uma ID de pacote incorreta ou um token de dispositivo que foi criado com a ID de pacote errada.

Para resolver esse problema, acesse sua conta de desenvolvedor da Apple e navegue até o certificado existente usado ao migrar para a autenticação baseada em tokens. Confirme o ID do pacote atribuído a esse certificado e verifique se você está usando o mesmo ID para o aplicativo da sua plataforma e também para os tokens do seu dispositivo.

Tópico não permitido

"providerResponse": "{\"reason\":\"TopicDisallowed\"}",
"statusCode": 400,
"status": "FAILURE"

A causa desse erro pode ser uma ID de pacote incorreta ou um token de dispositivo que foi criado com a ID de pacote errada.

Para resolver esse problema, acesse sua conta de desenvolvedor da Apple e navegue até o certificado existente usado ao migrar para a autenticação baseada em tokens. Confirme o ID do pacote atribuído a esse certificado e verifique se você está usando o mesmo ID para o aplicativo da sua plataforma e também para os tokens do seu dispositivo.

Conclusão

Os desenvolvedores podem enviar notificações push móveis para os APNs usando a autenticação baseada em tokens usando uma chave .p8 para autenticar um endpoint de dispositivo Apple. Esse é o método de autenticação recomendado devido ao aprimoramento da segurança e ao menor esforço de gerenciamento, eliminando a necessidade de renovação anual do certificado e permitindo o compartilhamento de tokens entre vários aplicativos.

Para saber mais sobre a autenticação baseada em tokens de APNs com o Amazon SNS, visite o Guia do desenvolvedor do Amazon SNS.

Para obter mais recursos de aprendizado sem servidor, visite Serverless Land.

 

Este artigo foi traduzido do Blog da AWS em Inglês.

 


Sobre o autor

Yashlin Naidoo é engenheiro de suporte

 

 

 

 

Tradutor

Daniel Abib é Enterprise Solution Architect na AWS, com mais de 25 anos trabalhando com gerenciamento de projetos, arquiteturas de soluções escaláveis, desenvolvimento de sistemas e CI/CD, microsserviços, arquitetura Serverless & Containers e segurança. Ele trabalha apoiando clientes corporativos, ajudando-os em sua jornada para a nuvem.

https://www.linkedin.com/in/danielabib/