API Keys: o que são, como e quando devemos utilizá-las
É muito comum utilizarmos Application Programming Interface (API) quando criamos uma aplicação de software. Elas nos permitem a troca e a obtenção de informações com maior praticidade entre programas. Trabalhar com esse tipo de recurso nos permite ter mais segurança e reduzir o volume de dados, além de nos trazer a possibilidade de auditar os acessos de um sistema. Um dos elementos essenciais para o seu funcionamento são as chaves API (API Keys).
Quando integramos uma plataforma a parceiros, um dos fatores mais importantes para garantir a segurança dos usuários é a autenticação. Com a autenticação fazendo o uso dessas chaves, conseguimos nos prevenir de usos maliciosos de API’s, tendo mais convicção de que estaremos em um ambiente mais seguro.
O que é uma API?
As APIs ou Interface de Programação de Aplicação no português, nos permitem o acesso aos seus dados e funcionalidades de nossas aplicações para desenvolvedores externos ou parceiros de negócio. Desse modo, cada desenvolvedor poderá trabalhar em suas soluções.
Uma API permite que os serviços e produtos consigam se comunicar entre si, de modo a aproveitar todas as informações transmitidas como recursos para as suas funções ao realizar uma integração com o sistema.
Isso ocorre por meio de uma interface documentada, o que significa que os desenvolvedores não precisam necessariamente saber como a API é implementada. O seu uso se resume a uma requisição feita e a resposta que é relativa às informações presentes na API.
Nos dias atuais, muitas das aplicações existentes não seriam possíveis sem o uso de API’s. Elas também podem ser utilizadas com o objetivo de monetização por meio de seus recursos.
O que é uma API Key?
As API Keys ou chaves API são essenciais para o uso seguro de interfaces de programação e servem para identificar o usuário que está utilizando a API.
Quando se desenvolve uma aplicação web, você não quer que clientes anônimos tenham acesso às suas funções. Pensando nisso, é necessário contar com um token de autenticação que irá garantir a identificação correta e segura de cada usuário que está fazendo as chamadas na API.
Existem 3 formas de autenticação de uma web API:
- JSON web tokens;
- OAuth;
- API key.
No nosso exemplo mais a frente, utilizaremos o primeiro dos 3, o JSON web tokens. No caso dele, temos uma forma de complexidade que nos serve como uma camada de proteção entre as informações transmitidas e os usuários. Com isso, se torna possível identificar o usuário que está fazendo a requisição.
No OAuth teremos um protocolo avançado que possibilita a delegação correta e segura dos usuários na comunicação entre os sistemas. Desse modo é possível identificar quando um terceiro pode fazer chamadas em seu nome para um sistema onde há um cadastro referente ao usuário realizando as chamadas.
E por fim, a API Key que por sua vez serve como forma simplificada de autenticação, fornecendo o acesso seguro a um sistema web API. Dessa maneira, será possível controlar o acesso de uma API key por sistema, seja qual for o usuário que está realizando a chamada.
Para que serve a chave API?
A principal utilidade é identificar qual aplicação está fazendo a requisição da interface, isso significa que cada um dos projetos possui uma chave única para distingui-lo dos demais serviços.
Como as API keys funcionam?
Como já dito, uma chave API possibilita que o servidor identifique qualquer aplicativo ou desenvolvedor que está fazendo a requisição de acesso. Além disso, ela nos permite definir um conjunto de direitos de acesso, trazendo um maior controle sobre o fornecedor dos serviços em relação a quem está solicitando. Isso possibilita algumas ações específicas como proibir ou permitir determinados recursos existentes na API.
A chave API é um identificador único, normalmente criptografado em uma sequência extensa de caracteres, essa combinação que possui letras e números funciona como uma espécie de “senha segura”, que além de autenticar um acesso a o servidor em questão, fornece a sua identificação durante a requisição.
Uma chave contém mais de 64 caracteres, que são gerados de forma aleatória por sistemas que criam identificadores únicos universais e são também conhecidos por GUIDs.
Abaixo citarei cada etapa de funcionamento de uma API key de acordo com cada passo do processo de autenticação e de controle de acesso para melhor compreensão de seu funcionamento.
Acesso
A primeira das etapas durante uma requisição a uma API é o acesso aos dados que são transmitidos entre os sistemas. Cada solicitante envia ao servidor um identificador exclusivo que será utilizado para identificar se a pessoa ou projeto tem os direitos necessários para realizá-los. Caso o servidor não consiga identificar e autenticar o solicitante da requisição, ele irá enviar uma resposta de falha.
A principal ideia por trás do uso de uma chave API é justamente identificar quem está se comunicando com o servidor para utilizar os serviços oferecidos por ele. Sendo assim, se a chave utilizada for uma chave que o servidor não consegue identificar, os serviços não poderão ser utilizados.
Autorização
O próximo passo para que o solicitante seja autorizado pelo servidor é a autorização, que determinará os direitos e o escopo do solicitante, definindo exatamente a forma como o usuário que foi autenticado poderá utilizar os serviços.
Direitos
Como citado, os direitos são justamente os recursos disponíveis para cada usuário de uma API. Assim, se a chave utilizada tiver a permissão necessária para acessar determinados dados, o solicitante pode ler essas informações ao realizar uma pesquisa. Também existe a possibilidade de combinação dos direitos do solicitante como leitura e gravação juntos.
Além dos direitos disponibilizados ao solicitante, todo sistema de API conta com uma chave global que não só irá permitir leitura e gravação de informações, mas também o acesso e controle total aos serviços e recursos que uma API oferece, taisdireitos são conhecidos como direitos administrativos.
Quando utilizar as chaves API?
Como podemos ver, o uso da API key é fundamental para termos maior controle sobre quem utiliza as interfaces de programação de aplicações. Com isso, ela é utilizada em diferentes situações para termos mais eficiência e segurança dos nossos dados.
Dentre elas, citarei as principais formas de como usar uma API key, de acordo com o contexto do desenvolvedor:
- Bloqueio de tráfego anônimo limitando o acesso de usuários anônimos;
- Controle de chamadas de API limitando o consumo, o tráfego e o uso, assegurando um tráfego legitimo aos recursos;
- Identificação de tráfego da API, possibilitando identificar padrões de uso que permitem detectar atividades e problemas maliciosos na interface;
- Registros de filtro, tornando possível filtrar as ações conforme a chave específica, a fim de avaliar cada uma das atividades.
Com tudo dito acima, vamos ao exemplo:
Como dito acima, utilizaremos o JSON Web tokens para exemplo. Os componentes básicos de um JWT são header, payload e signature. Essas três partes são separadas por ponto “.”. Ficando dessa forma:header.payload.signature.
Header
O Header é o cabeçalho do token onde iremos adicionar duas informações. O alg (algorithm) que será o algoritmo utilizado para criar a signature.
Payload
O payload é o componente que poderemos encontrar os dados referentes à autenticação como senha e email, por exemplo:
Signature
A assinatura do token (signature) é composta pela codificação do header e do payload somada a uma chave secreta e é gerada pelo algoritmo que foi especificado no cabeçalho (header).
Criando um jwt token
No diretório escolhido, crie um arquivo JS com o nome que preferir. Faça a instalação da lib jwt que preferir. Existem diferentes libs que ajudam na geração de JWTs, no meu caso, usarei a ‘jsonwebtoken’ que é uma das mais utilizadas.
O primeiro passo é importar a lib no nosso arquivo:
Agora criamos a nossa chave secreta. A ideia é que seja uma chave que só você tenha conhecimento e que seja difícil, a fim de dificultar ataques maliciosos. Eu utilizo um método da própria biblioteca, ficando assim:
Após realizar o processo acima, criaremos o token utilizando o método sign que receberá como parâmetro o payload, a chave secreta e o header:
Como visto acima, adicionei as informações do usuário que contém email e senha, a secret (chave secreta) e a jwt config, que possui o tipo de algoritmo utilização e o tempo de expiração, que no caso são 7 dias, como mostrado abaixo:
Para visualizar a saída e verificar se está tudo funcionando corretamente, utilize as bibliotecas com a finalidade de testar seus endpoints como o insomnia, entre outros.
Verificando nosso JWT
Para realizar a verificação do token gerado, podemos usar da própria biblioteca ‘jsonwebtoken’ um método chamado decode que receberá o token e fará a decodificação.
Ele retornará os dados do usuário que gerou o token com e-mail, senha, entre outros.
Em breve trarei um novo artigo, criando um projeto mais completo, começando do zero para uma compreensão mais aprofundada, tendo em vista que este artigo foi escrito para quem já possui um certo conhecimento no assunto.
A Revelo Content Network acolhe todas as raças, etnias, nacionalidades, credos, gêneros, orientações, pontos de vista e ideologias, desde que promovam diversidade, equidade, inclusão e crescimento na carreira dos profissionais de tecnologia.