Quando se trata de implementar automação e orquestração, é fundamental entender como a autenticação funciona com APIs. A maioria dos produtos em seu ambiente provavelmente possui algum tipo de mecanismo de autenticação. Você precisa conhecer as nuances e diferenças entre os vários métodos de autenticação para automatizar a comunicação com essas APIs. Neste artigo, meu objetivo é ajudá-lo a entender isso, detalhando três métodos diferentes de autenticação de API.
Autenticação por nome de usuário e senha
Um dos métodos de autenticação mais comuns usados por APIs REST é a autenticação por nome de usuário e senha. Existem vários tipos diferentes que utilizam nome de usuário e senha, mas o mais comum é a autenticação HTTP básica. É simples para quem tem experiência com APIs, mas pode ser um desafio para iniciantes entenderem como funciona e como usá-la.
Por RFC2617, Para fazer uma requisição HTTP usando autenticação básica, é necessário inserir uma string codificada em base64 composta por um nome de usuário e uma senha, precedidos por dois pontos. Em seguida, adiciona-se a string `Basic` seguida de um espaço. Para ficar mais claro, vejamos o exemplo a seguir:
Nome de usuário: primeiro.último
Senha: my5uper5ecretP@ssw0rd
Imagine que você tenha um nome de usuário e uma senha como no exemplo acima. Para usá-los como parte de uma solicitação HTTP para uma API, você deve primeiro combiná-los com dois pontos:
primeiro.último:meu5super5secretoP@ssw0rd
Uma vez feito isso, eles precisam ser codificados em base64. Em Python, você pode fazer o seguinte:
importar base64
auth_string = base64.b64encode(b':'.join(('first.last'.encode('latin1'), 'my5uper5ecretP@ssw0rd'.encode('latin1')))).strip()
Se você imprimir a nossa variável auth_string, receberá o seguinte valor:
b'Zmlyc3QubGFzdDpteTV1cGVyNWVjcmV0UEBzc3cwcmQ='’
Agora que você tem essa string codificada, adicione a string do método de autenticação (que é Básico) a essa variável. A string completa da variável deve ser a seguinte:
Básico Zmlyc3QubGFzdDpteTV1cGVyNWVjcmV0UEBzc3cwcmQ=
Uma vez criada, essa string é adicionada a um cabeçalho HTTP específico na sua requisição HTTP. Esse cabeçalho é especial e usado para autenticação. Se você ainda não adivinhou, o cabeçalho se chama Authorization (Autorização). Prático, não é?
Aqui está um exemplo de comando cURL usando autenticação básica:
AUTH=$(echo -ne "$BASIC_AUTH_USER:$BASIC_AUTH_PASSWORD" | base64 --wrap 0) curl \ --header "Content-Type: application/json" \ --header "Authorization: Basic $AUTH" \ --request POST \ --data '{"key1":"value1", "key2":"value2"}' \ https://example.com/
Autenticação JWT
A autenticação JWT (JSON Web Token) é uma forma comum de autenticação por token baseada em RFC 7519. A autenticação JWT é composta por três partes principais: um cabeçalho, uma carga útil e uma assinatura. Cada uma dessas partes é codificada em base64 e enviada juntamente com uma solicitação HTTP para autenticação.
Um conjunto de declarações JWT é composto por uma ou mais declarações especificadas em um objeto JSON. Cada declaração em um conjunto de declarações possui uma chave única e um valor correspondente. Por exemplo, a estrutura típica de um conjunto de declarações JWT é:
{ “iss”: “josh”, “exp”: 1617221146, “https://api.mycompany.com/some...”: true }
Cada chave e valor deve ser único e considerado uma declaração individual dentro do conjunto de declarações. Cada uma dessas chaves especificadas é arbitrária e não é exigida pelo padrão RFC. Isso significa que a estrutura do conjunto de declarações na autenticação JWT fica a critério da API/serviço com o qual você está trabalhando.
Assim como os valores de cabeçalho e assinatura, depois de definir sua declaração JWT (payload), ela é codificada em base64. Você pode testar esses valores em https://jwt.io também.
Autenticação OAuth2
A autenticação OAuth2 está se tornando extremamente popular pelo simples fato de suportar diversas maneiras (fluxos) de autenticar no(s) mesmo(s) endpoint(s). Isso ajuda os desenvolvedores a criar serviços robustos que permitem a autorização em diferentes situações, como autenticação em um aplicativo web, aplicativo desktop, dispositivo móvel etc., simplesmente alterando alguns detalhes em vez de implementar um mecanismo de autenticação completamente diferente para cada uma.
Para ajudar a compreender os conceitos de autenticação OAuth2, criei este diagrama que mostra os quatro componentes principais:
-
Um usuário ou sistema que precisa de acesso.
-
Um servidor responsável pela autorização.
-
Um aplicativo que recebe permissão de acesso por meio do servidor de autorização.
-
Essa aplicação então acessa os dados com base nessa autorização.

Se você quiser saber mais sobre OAuth2, confira a série de três partes que escrevi explicando o OAuth2 em detalhes aqui:
Ao analisar os tipos de autenticação, OAuth2 e JWT são mais seguros do que a autenticação básica, e você provavelmente encontrará ambos ao usar APIs, especialmente ao trabalhar com produtos como EDR, SIEM, etc.
Existem muitos outros tipos de autenticação de API REST, bem como variações dos métodos listados acima, mas espero que isso tenha ajudado você a entender os três métodos de autenticação mais comuns usados por APIs.

