Começaremos com a definição padrão:
Uma chave de API é uma cadeia de caracteres usada para identificar e autenticar um aplicativo ou usuário que solicita o serviço de uma API (interface de programação de aplicativos).
Neste artigo, detalhamos essa definição para os curiosos (técnicos ou não) que desejam conhecer a história interna do que é uma chave de API, faz e como ela funciona.
Uma chave de API é o mecanismo de segurança padrão para qualquer aplicativo que forneça um serviço para outros aplicativos.
Embora não sejam o único método (APIs podem usar JWT, sobre o qual escrevemos aqui: API keys vs JWT auth ) , as chaves de API são o método usado com mais frequência para proteger uma API.
A API do Google Maps é um exemplo de serviço de API (“endpoint”) que requer uma chave de API. Se você fornecer um endereço físico à API do Google (digamos “1001 Main Street, NY, NY”), a API retornará a latitude e a longitude do local mais provável (40,736124774992504, -73,82508447321075).
No entanto, sem uma chave de API válida, o Google não responderá à sua solicitação. Você precisa de permissão especial. A chave API permite que o Google saiba quem você é e se você tem o direito de acessar o serviço de mapas.
Isso é chamado de autenticação (em oposição à autorização, que discutiremos mais adiante neste artigo).
A propósito, só para entender como o mecanismo funciona, quando escrevemos “Damos um endereço à API do Google” ou “Enviamos ao Google uma chave de API”, estamos nos referindo ao envio de informações para um servidor do Google (fazendo uma solicitação através de métodos de requisição HTTP como Post e Get) e recebendo informações de volta (obtendo uma resposta da mesma API).
Em suma:
Se um desenvolvedor quiser criar um aplicativo de mapa usando a lista quase exaustiva de endereços mundiais do Google, ele precisará primeiro se inscrever no Google e obter uma chave de API para ter o direito de usar o serviço Google Map API.
Algumas APIs não exigem uma chave de API. Por exemplo, a URL do Youtube que você usa para assistir a um vídeo é, na verdade, uma solicitação de API que não requer uma chave de API.
É gratuito para usar de qualquer lugar do mundo, em qualquer dispositivo, por todas as pessoas (não apenas desenvolvedores).
Dito isso, as APIs do YouTube também oferecem outros serviços que exigem uma chave de API, como aqueles que fornecem informações (privadas ou geralmente pagas) sobre listas de reprodução de canais, histórico de comentários, estatísticas de uso e centenas de outros dados de propriedade do YouTube.
Uma preocupação central com qualquer API é sua facilidade de uso. Como repetiremos abaixo no contexto de segurança: a facilidade de uso é fundamental para o uso da API.
Todas as empresas que priorizam a API desejam minimizar todo o atrito no uso de seus produtos de API. Isso inclui tornar o acesso às suas APIs fácil e seguro, que é exatamente o que as chaves de API foram projetadas para fornecer.
Conforme descrito acima, uma chave de API permite que um servidor identifique qualquer desenvolvedor ou aplicativo (o solicitante ou usuário ) tentando acessar seu(s) serviço(s).
Uma chave de API também define um conjunto de direitos de acesso . Os direitos de acesso autorizam o solicitante a realizar ações específicas e o proíbem de realizar outras ações.
Vamos entrar em detalhes.
Suas chaves de API são identificadores exclusivos compostos por uma combinação de números e letras. Alguns também contêm caracteres não alfanuméricos.
O identificador único não significa nada por si só; seu único significado é sua singularidade. É semelhante a uma senha ou código secreto.
As chaves de API geralmente contêm mais de 64 caracteres e são geradas por randomizadores do sistema que criam identificadores exclusivos universais (geralmente chamados de GUID s).
Pense em uma chave de API como uma forma de obter acesso aos dados e à funcionalidade de um aplicativo por meio de uma API.
Cada solicitante de API envia ao servidor um identificador exclusivo, que o servidor usa para determinar ( autenticar ) se a pessoa ou o aplicativo que solicita o serviço tem o direito de fazê-lo.
Se o servidor não conseguir autenticar o solicitante de uma chamada de API (solicitação), ele enviará de volta uma resposta de falha. Esta é a ideia básica por trás da criação de uma chave de API: se você estiver usando uma chave que o servidor não reconhece, não poderá usar o serviço.
No entanto, se o servidor reconhecer a chave API e autenticar o detentor da chave, esse usuário terá o direito de usar o serviço.
A próxima etapa é o servidor autorizar o solicitante a fazer uma ou mais coisas.
O processo de autorização determina os direitos e o escopo de um solicitante. A autorização define a maneira exata pela qual um solicitante autenticado pode usar uma API.
Envolve definir seus direitos (quais funcionalidades e dados você pode acessar) e escopo (quantos dados, por quanto tempo você pode usar a API e muito mais).
Os direitos são sobre o que você pode fazer. Se a chave de API do solicitante contiver o direito de pesquisar os dados, o solicitante poderá ler os dados para realizar a pesquisa.
Se o solicitante tiver o direito de gravar dados, ele poderá executar algumas ou todas as operações de gravação . O acesso de gravação geralmente vem com mais detalhes. Por exemplo, o solicitante pode ter o direito de atualizar um índice, mas não excluir registros.
Você também pode combinar direitos. Por exemplo, um solicitante pode ter recursos de leitura e gravação ou apenas somente leitura. Normalmente, os solicitantes têm várias APIs para executar diferentes ações. Por exemplo:
Somente leitura para pesquisas.
Acesso de leitura e gravação para navegação e indexação (adições, atualizações, exclusões).
Acesso de administrador , que inclui tudo, inclusive a criação de outras APIs.
Todo sistema de API possui uma chave de API global que não apenas permite operações de leitura e gravação, mas também acesso total a qualquer outra coisa que uma API possa fazer.
Por exemplo, uma API Admin permite que aplicativos e usuários realizem meta ações como adicionar, remover ou modificar usuários, identificadores, direitos e escopos.
Dado o poder de uma chave de API Admin, você deseja que essa chave de API seja totalmente segura, ou seja, oculta e protegida do público.
O mesmo se aplica a qualquer chave de API de nível de gravação. As chaves somente leitura podem ser mais flexíveis, dependendo do caso de uso. A leitura de dados confidenciais de negócios obviamente requer maior segurança do que a pesquisa de produtos e filmes em um site.
Depois que um solicitante tem o direito de fazer algo, uma API pode restringir ou expandir os recursos do solicitante dentro desse direito. Por exemplo, se um solicitante tiver o direito geral de atualizar índices, a chave de API poderá limitar o acesso do solicitante a apenas determinados índices.
Ou a chave de API pode abranger o acesso somente leitura que permite que um solicitante acesse apenas um pequeno número de registros.
Você pode usar o escopo para maior segurança filtrando determinados endereços IP. Você também pode definir um tempo de validade, talvez uma solicitação por dia ou um pequeno número diário de solicitações durante um período de 30 dias.
Por fim, uma chave de API pode fornecer limitações baseadas em filtro. Por exemplo, uma chave de API pode permitir que um usuário atualize apenas itens de “roupas” ou “alimentos”. Ou pode restringir um solicitante somente leitura para executar pesquisas ou filtros predefinidos.
Um bom exemplo do último ponto sobre o uso restritivo da API é quando você concede acesso somente leitura, mas o restringe com um filtro que omite dados confidenciais. Isso adiciona segurança adicional, permitindo que o solicitante veja os dados projetados apenas para visualização pública.
Mas a segurança requer mais discussão.
Em termos de segurança, uma chave API só vai até certo ponto. Essencialmente, se uma chave for roubada ou vazada, não haverá mais segurança.
Há muitas maneiras de alguém obter uma chave de API. Os hackers podem interceptar a solicitação, roubar a chave e, em seguida, transformar a solicitação em algo muito mais prejudicial.
Ou, como é mais frequente, um desenvolvedor pode revelar acidentalmente a chave da API enviando-a pela Internet para que qualquer pessoa a encontre facilmente. Ou envie-o acidentalmente para um repositório Git. Ou escreva em um guardanapo e deixe na mesa do restaurante.
Algumas proteções de segurança dependem de verificações de segurança adicionais. Alguns desses métodos exigem que o solicitante faça um trabalho extra, o que prejudica a popularidade de uma API. Vale a pena ter em mente a API 101:
A facilidade de uso é fundamental para o uso da API, portanto, você deseja minimizar todo o atrito.
Aqui estão algumas salvaguardas de segurança que não exigem sobrecarga ou sobrecarga extra para o usuário da API:
Criação de limites de taxa, que controlam o número de vezes que a API pode ser chamada.
Criação de outros limites ou restrições de aplicativos para minimizar ataques.
Usando métodos de detecção de ataque para sinalizar comportamento inesperado, referenciadores ou comportamento de ataque conhecido.
Rejeitar solicitações fora do padrão ou prejudiciais à privacidade ou aos dados.
E, conforme mencionado acima, removendo o acesso a dados não confidenciais.
Crie ou automatize manualmente a geração de novas chaves de API regularmente.
Nota técnica: Muitas dessas salvaguardas podem ser adicionadas no cabeçalho como parâmetros na solicitação de API.
Aqui estão as técnicas de segurança de API mais populares que exigem que os desenvolvedores façam mais do que apenas fornecer uma chave de API:
Usando um tipo especial de chave de API chamada chave de API segura.
Efetuando login e usando IDs de usuário e senhas.
Usando tokens de autenticação (por exemplo, tokens JWT) para autenticação e autorização.
Criptografando. Para que isso funcione, o usuário deve ter o mesmo software de criptografia que o servidor da API. O software de criptografia converte a chave API em dados ilegíveis, que somente o servidor API pode entender.
Uma chave de API segura contém proteções de segurança adicionais sobre a chave de API padrão: (a) é efêmera (criada instantaneamente e temporária); como tal, não pode ser visto em um painel para ser modificado ou gerenciado de forma alguma.
Mais importante, (b) contém o id do usuário – assim, apenas um usuário pode usar a chave.
Normalmente, as chaves de API são geradas uma vez , para qualquer usuário, e permanecem as mesmas por toda a vida. No entanto, existem duas desvantagens com chaves permanentes:
Assim que alguém roubar a chave, poderá usá-la até que o roubo seja descoberto e a chave removida.
Se você precisar que 10.000 usuários tenham chaves exclusivas, precisará criar e manter todas elas. E embora você possa automatizar a geração de novas chaves de API, quase sempre precisará alterar manualmente o código.
A maioria dos aplicativos de nível de produção precisa de algo mais seguro e fácil de gerenciar – sem nenhum trabalho adicional.
Como funciona: uma chave de API segura aproveita a sessão e/ou o ID do usuário, incluindo essas informações como parte da geração da chave. Essencialmente, a chave é gerada dinamicamente combinando o identificador do usuário com o escopo da chave (por exemplo, limites de tempo limite, filtros de segurança).
Depois que a chave é gerada, o solicitante deve sempre enviar a chave de API gerada e seu ID de usuário e escopo. O servidor da API gerará novamente a chave usando o ID e o escopo do usuário e a comparará com a chave que o usuário enviou. Se eles forem diferentes, obviamente é um hack.
Essa lógica de verificação dupla é apenas um passo para uma melhor segurança. A próxima etapa é solicitar que o usuário da API faça login.
O último método de segurança que mencionaremos aqui envolve exigir que o usuário da API faça login.
Nesse cenário, se o logon for bem-sucedido, o servidor da API emitirá um token exclusivo e ilegível que o usuário da API deverá usar enquanto permanecer conectado. Além disso, o token inclui as credenciais do usuário, tornando difícil para qualquer pessoa que não o usuário enviar o token.
Assim, melhoramos o método de chave de API segura temporária de duas maneiras importantes:
O JWT requer um logon.
O JWT gera um token cujo valor contém uma versão criptografada das credenciais de logon do usuário. Essas credenciais de usuário permitem que o servidor de API autentique o usuário a cada solicitação de API sucessiva.
Saiba mais sobre o token JWT e como ele difere de uma chave de API.
Discutimos as finalidades da chave de API, sua aparência, como ela funciona e o que pode ou não pode ser feito com uma chave de API.
Também entramos em alguns detalhes sobre segurança. Terminaremos em outro aspecto: o de rastrear o uso da API e melhorar a API.
Uma API depende da experiência do usuário para melhorar seu design e funcionalidade. Uma empresa que deseja oferecer a melhor API absoluta no crescente mercado competitivo de APIs deve saber como seus clientes usam suas APIs.
Ao registrar cada solicitação – quais solicitações, o número de solicitações, o sucesso e as falhas de cada solicitação, o provedor de API adiciona relatórios, depuração e análise ao design e implementação da API.