A melhor autenticação da Twilio com chaves de API

March 01, 2021
Escrito por
Revisado por
Diane Phan
Twilion

A Twilio gera um Identificador de string (SID) da conta e um token de autentificação quando você cria uma conta da Twilio. Com essas credenciais, você pode executar todas as funções disponíveis na API da Twilio.

Sempre que você entregar o SID da conta e o token de autenticação a um dispositivo ou colega, você aumentará o risco de essas credenciais serem comprometidas. Felizmente, a Twilio fornece recursos que minimizam esse risco. Este artigo aborda:

  • Tokens de autenticação
  • Subcontas
  • Chaves de API

Tokens de autenticação

Quando você cria uma nova conta ou subconta, a Twilio gera um SID de conta e um token de autenticação para essa conta. Você pode encontrar essas credenciais na página do dashboard da sua conta:

O dashboard da conta Twilio com o SID da conta e o token de autenticação é apontado pelas setas.

Essas credenciais são frequentemente usadas para se comunicar com a Twilio por meio da CLI, dos SDKs ou usando diretamente a API. Há apenas um Token de autenticação por padrão; portanto, você deve evitar compartilhar esse token de autenticação para minimizar o risco de ele ficar comprometido. Se o token de autenticação for comprometido por algum motivo, gire-o criando um token de autenticação secundário para que o token vazado se torne inútil.

Siga as etapas abaixo para criar um token de autenticação secundário:

  • Clique no link da conta na barra de navegação do canto superior direito
  • No submenu, clique em Chaves e tokens de API
  • Role até a parte inferior da página e clique em Solicitar um token secundário

Depois de ter um token secundário, você pode promover esse token a token primário. Isso removerá o antigo token primário e o tornará inútil, como visto abaixo.

Infelizmente, você só pode girar esses tokens usando o console da Twilio. Não é possível girar tokens de credenciais de API usando a API. No entanto, você pode girar as chaves de API que serão abordadas posteriormente neste artigo.

Subcontas

As Subcontas são exatamente como as contas, mas são de propriedade e podem ser gerenciadas pela conta pai. Em vez de usar os tokens de autenticação da conta pai, você pode usar os tokens de autenticação da subconta. Se o token de autenticação estiver comprometido, o token não poderá ser usado para acessar recursos da conta pai ou outras subcontas.

Você pode criar uma subconta usando o console da Twilio seguindo estas etapas:

  • Clique no link da conta na barra de navegação do canto superior direito
  • No submenu, clique em Subcontas
  • Clique no ícone de mais (+) se você já tiver outras subcontas, caso contrário, clique no botão Criar nova subconta
  • Insira um nome amigável para a subconta
  • Clique no botão Criar

Você também pode criar subcontas usando a CLI, o SDK e a API da Twilio, conforme documentado na documentação da Twilio.

Chaves de API

As chaves de API são a forma preferida de autenticar os serviços da Twilio. Há dois tipos de Chaves de API: Chaves de API Padrão e Principal.

As Chaves de API padrão dão acesso a todas as funcionalidades da API da Twilio, exceto o gerenciamento de chaves de API, configuração de conta e subcontas.

As Chaves de API principais têm o mesmo acesso que as chaves padrão, mas também podem gerenciar chaves de API, configuração de conta e subcontas. As chaves de API principais fornecem o mesmo nível de acesso que se você estivesse usando tokens de autenticação.

Você pode criar chaves de API usando o console da Twilio seguindo estas etapas:

  • Clique no link da conta na barra de navegação do canto superior direito
  • No submenu, clique em Chaves e tokens de API
  • Clique no botão Criar chave de API
  • Insira um nome amigável para sua chave de API
  • Selecione a região mais próxima de você
  • Selecione se o tipo de chave deve ser padrão ou principal

Você também pode criar chaves de API padrão usando a CLI, o SDK e a API, conforme consta na documentação da Twilio. Você precisa fazer a autenticação com um token de autenticação ou uma chave de API principal para gerenciar chaves de API.

Gire as chaves de API

Uma das vantagens de usar chaves de API em vez de credenciais de API é que você pode usar a API para criar e excluir chaves de API. Dessa forma, você pode girar programaticamente chaves de API como uma medida preventiva.
Veja como você iria girar as chaves de API usando a CLI da Twilio e o PowerShell:

# Step 0: Install the Twilio CLI and authenticated with account API Credentials or with a Master API Key
# Twilio CLI installation instructions: https://www.twilio.com/docs/twilio-cli/quickstart

# Step 1: Create a new API Key
$NewApiKey = twilio api:core:keys:create -o json | ConvertFrom-Json;
$NewApiKeySid = $NewApiKey.sid;
$NewApiKeySecret = $NewApiKey.secret;

# Step 2: Update your applications to use the new API Key SID and API Key Secret
# --- TO IMPLEMENT BY YOU --- 

# Step 3: Fetch the existing API Key SID (hardcoded for sample)
$OriginalApiKeySid = "[YOUR_API_KEY_SID]";

# Step 4: Delete the old API Key
twilio api:core:keys:remove --sid=$OriginalApiKeySid;

Observação: Certifique-se de ter a CLI da Twilio instalada antes de executar este código.

AVISO: Certifique-se de desenvolver e testar seu aplicativo para garantir que a rotação de chave de API seja realizada tranquilamente.

Você pode criar quantas chaves de API precisar, em contrapartida às credenciais de API, onde você só pode ter dois tokens (primário e secundário) por conta. Então, em vez de passar credenciais de API para seus colegas de equipe e aplicativos, você deveria dar chaves de API a eles. Dessa forma, você pode revogar as chaves de API com segurança quando elas não forem mais ser usadas.

Mude de Tokens de autenticação para Chaves de API

Se você já estiver usando os tokens de autenticação em seu código, poderá passar a usar chaves de API com apenas algumas linhas de alterações. Observe que é interessante que você obtenha alguns dos seus tokens de autenticação do console da Twilio e salve-os localmente em variáveis de ambiente para que o código seja executado. Para obter mais informações sobre como fazer isso, siga as instruções sobre como armazenar credenciais da Twilio com segurança.  

Veja como você autenticaria e enviaria um SMS com as credenciais de API usando C#:

// Find your Account Sid and Token at twilio.com/console
// and set the environment variables. See http://twil.io/secure
string accountSid = Environment.GetEnvironmentVariable("TwilioAccountSid");
string authToken = Environment.GetEnvironmentVariable("TwilioAccountAuthToken");

TwilioClient.Init(
    username: accountSid,
    password: authToken
);

string twilioPhoneNumber = Environment.GetEnvironmentVariable("TwilioPhoneNumber");
string targetPhoneNumber = "[TARGET_PHONE_NUMBER]";

var message = MessageResource.Create(
    body: "Hello World",
    from: new PhoneNumber(twilioPhoneNumber),
    to: new PhoneNumber(targetPhoneNumber)
);
Console.WriteLine(message.Sid);

Primeiro, passe o SID da sua conta como o parâmetro username, e o token de autenticação como o parâmetro password para TwilioClient.Init. Em seguida, envie uma mensagem de texto usando MessageResource.Create.

Atualize os parâmetros passados para TwilioClient.Init para fazer a autenticação com sua chave de API em vez da credencial de API:

// Find your Account Sid and Token at twilio.com/console
// and set the environment variables. See http://twil.io/secure
string accountSid = Environment.GetEnvironmentVariable("TwilioAccountSid");
string apiKey = Environment.GetEnvironmentVariable("TwilioApiKeySid");
string apiSecret = Environment.GetEnvironmentVariable("TwilioApiKeySecret");

TwilioClient.Init(
    username: apiKey, 
    password: apiSecret, 
    accountSid: accountSid
);

Primeiro, passe o SID da chave de API para o parâmetro username em vez do SID da conta. Em seguida, passe o segredo da chave de API para o parâmetro password em vez do token de autenticação. Por fim, passe o SID da conta para o parâmetro accountSid.

Resumo

Você pode autenticar com a API da Twilio usando o ID da conta como o nome de usuário e o token de autenticação primário ou secundário. Se o token primário estiver comprometido, você poderá promover o token secundário a token primário, o que tornará o antigo token primário inutilizável.

Você pode proteger suas credenciais segmentando sua conta com subcontas. Se um token de autenticação ou chave de API para uma subconta for comprometido, o token só poderá ser usado para acessar recursos na subconta.

As chaves de API agora são a forma preferida de autenticar com a API da Twilio. Você pode criar quantas chaves de API forem necessárias e removê-las se elas estiverem comprometidas ou não forem mais ser usadas.

Niels Swimberghe é uma desenvolvedora de infraestrutura de TI completa e criadora de conteúdo técnico belga que trabalha nos EUA. Entre em contato com a Niels no Twitter @RealSwimburger e siga o seu blog pessoal sobre .NET, Azure e desenvolvimento da web em swimburger.net.