Se estás a desenvolver um software ou produto SaaS, vais frequentemente deparar-te com um caso de uso amplo ou pedido de funcionalidade: Pedidos API. Especialmente clientes corporativos maiores podem querer acesso programático a recursos, seja a nível pessoal ou organizacional.
Nestes casos, chaves API, Tokens de Acesso Pessoal (PATs) e autenticação Máquina-a-Máquina (M2M) são frequentemente necessários. Neste artigo, vamos explorar as diferenças entre esses métodos e como podem ser usados no desenvolvimento de produtos B2B para desenvolvedores.
Primeiro, vamos dar uma olhada nas semelhanças entre os três.
Propósito de segurança: Todos os três métodos são usados para proteger e controlar o acesso a APIs, serviços ou recursos. Todos servem como um meio de autenticação e/ou autorização.
Abordagem baseada em tokens: Cada método normalmente envolve o uso de uma string ou token únicos para identificação. Esses tokens são geralmente enviados com pedidos API, frequentemente em cabeçalhos ou como parâmetros de consulta.
Revogável: Tokens ou chaves em todos os três métodos podem ser revogados ou invalidados se comprometidos ou não forem mais necessários. Isso permite respostas rápidas de segurança sem necessidade de alterar o sistema subjacente.
Acesso programável: Todos os três métodos facilitam o acesso programático às APIs ou serviços. Eles permitem automatização e integração entre diferentes sistemas ou aplicações.
Auditável: O uso desses métodos de autenticação pode ser registado e auditado. Isso permite rastrear o acesso API, monitorar atividades suspeitas e gerar relatórios de conformidade.
Adaptável ao controle de acesso: Todos os três métodos podem ser implementados com vários níveis de controle de acesso e permissões. Eles podem ser adaptados a diferentes modelos de segurança e requisitos arquitetónicos.
Independência do protocolo: Embora frequentemente usados com APIs REST, esses métodos podem ser aplicados a vários tipos de APIs e protocolos.
Compreender essas semelhanças ajuda a reconhecer as bases comuns desses métodos de autenticação. As suas diferenças permitem escolher a solução mais apropriada para casos de uso e requisitos de segurança específicos.
Agora, vamos discutir as diferenças, focando nos seus casos de uso e em quando usar cada método.
As chaves API são usadas para identificar e autorizar a aplicação ou serviço que envia o pedido. Elas são tipicamente de longa duração e estáticas até serem rotacionadas e frequentemente têm um conjunto fixo de permissões. Elas são principalmente usadas para comunicações de servidor para servidor ou acesso a dados públicos, estes tokens geralmente não representam um utilizador específico.
Uma chave API é emitida por um provedor de API e dada a um consumidor API registado [1], que a inclui em cada pedido. O servidor de API verifica então a chave API para validar a identidade do consumidor antes de devolver os dados solicitados.
As chaves API não são tão eficazes quanto outras formas de autenticação API, como OAuth e JWT, mas ainda desempenham um papel importante ao ajudar os produtores de API a monitorizar o uso, mantendo os dados sensíveis seguros.
[1]: Um consumidor API é qualquer aplicação, serviço ou utilizador que interage com uma API para acessar sua funcionalidade ou dados. Eles enviam pedidos para a API para realizar operações como recuperar, criar, atualizar ou excluir recursos. Consumidores API podem ser aplicações web, apps móveis, outros servidores ou até mesmo desenvolvedores individuais que usam a API para integrar com outros serviços ou criar novas funcionalidades em plataformas existentes.
Quando as pessoas discutem casos de uso de chaves API, elas frequentemente mencionam automação, compartilhamento de dados, testes, desenvolvimento e controle de segurança. No entanto, estes são bastante técnicos. Em cenários do mundo real, o objetivo mais comum ao desenvolver produtos é a integração.
O Zapier é uma ferramenta de automação popular que conecta diferentes aplicações web. Ao integrar uma aplicação com o Zapier, chaves API são usadas para autenticar e autorizar o acesso à API da aplicação. Por exemplo, se queres automatizar tarefas entre um sistema CRM e uma ferramenta de marketing por email, gerarias uma chave API do sistema CRM e a fornecerias ao Zapier. Esta chave é então usada para autenticar pedidos do Zapier para a API do CRM, permitindo que os dados fluam de forma segura entre os dois sistemas.
O Stripe utiliza chaves API para integrações seguras com várias plataformas e aplicações. Usa o Painel de Desenvolvedores para criar, revelar, eliminar e rodar as chaves API.
Um token de acesso pessoal é outro conceito semelhante, mas representa a identidade e permissões de um utilizador específico, é gerado dinamicamente após autenticação ou login bem sucedido, e tipicamente tem uma duração limitada, mas pode ser renovado. Eles fornecem controle de acesso fino a dados e capacidades específicas do utilizador e frequentemente são usados para ferramentas CLI, scripts ou acesso API pessoal.
Criação e gestão: Os utilizadores geram PATs através das configurações de sua conta na plataforma respectiva.
Por exemplo, no GitHub, os utilizadores podem criar PATs com permissões específicas e datas de expiração, seja para tokens de grão fino ou clássicos.
Em produtos Atlassian como Jira e Confluence, os utilizadores podem criar PATs a partir das configurações do seu perfil, especificando o nome do token e a expiração opcional.
Uso: PATs são usados como tokens bearer no cabeçalho de Autorização dos pedidos API. Isso significa que eles estão incluídos nos cabeçalhos HTTP para autenticar o pedido.
Eles permitem acesso seguro a recursos API, permitindo que os utilizadores realizem ações como criar, ler, atualizar e excluir recursos com base nas permissões concedidas ao token.
PATs podem ser usados em várias aplicações dentro de uma plataforma, fornecendo uma maneira unificada de gerenciar acesso e permissões.
Revogar e configurar expiração:
PATs oferecem segurança aprimorada ao permitir que os utilizadores revoguem tokens se forem comprometidos, sem necessidade de alterar a senha da conta.
As plataformas frequentemente recomendam definir datas de expiração para os PATs para reduzir o risco de exploração de tokens de longa duração.
Isto significa quando um desenvolvedor usa um PAT para automatizar o deploy de um código de um repositório para um ambiente de produção, reduzindo a intervenção manual e garantindo consistência.
Por exemplo, utilizadores do GitHub podem criar PATs para autenticar operações Git via HTTPS e interagir com a API REST do GitHub. Isso é útil para desenvolvedores que precisam automatizar tarefas como clonar repositórios, enviar commits ou gerenciar issues e pull requests.
Integração com aplicativos externos
Isto significa habilitar comunicação segura entre diferentes sistemas e aplicações. Isto parece semelhante ao cenário onde integração de chave API, mas o PAT representa o utilizador, não o cliente ou aplicação.
Por exemplo, um gestor de projeto usa um PAT para integrar uma ferramenta de gestão de projetos com um sistema de rastreamento de issues externo, permitindo troca e sincronização de dados sem problemas, como Atlassian (Jira e Confluence).
Os cenários acima são mais como ferramentas de desenvolvedor. Os PATs só são úteis para este tipo de produtos? Não. Aqui estão dois exemplos adicionais: um é um sistema CMS e outro é uma ferramenta de produtividade.
O Contentful é uma plataforma CMS headless que oferece PATs como uma alternativa aos tokens OAuth para acessar sua API de Gerenciamento de Conteúdo (CMA).
Principais características incluem:
Utilizadores podem criar múltiplos tokens com diferentes escopos e permissões.
Tokens são associados à conta do utilizador, herdando as suas permissões.
PATs são particularmente úteis para fins de desenvolvimento e automação.
M2M é projetada para comunicação serviço-a-serviço sem intervenção humana. Ela deriva da ideia de que nomes de utilizador e senhas são insuficientes para proteger serviços e não são eficientes para uma automação eficaz.
Aplicações Máquina-a-Máquina (M2M) agora adotam o Fluxo de Credenciais do Cliente, que é definido no protocolo de autorização OAuth 2.0 RFC 6749. Ele também pode suportar protocolos padrão semelhantes. Sim, a autenticação M2M é mais rigorosa quanto ao padrão aberto quando comparada aos PATs e chaves API.
Ela autentica a aplicação ou o serviço em si, não um utilizador, e frequentemente implementa JWT (Tokens Web JSON) para autenticação sem estado. Isto fornece uma maneira segura de os serviços interagirem uns com os outros em sistemas distribuídos.
Aqui está um exemplo conciso do uso da autenticação máquina-a-máquina (M2M) para comunicação backend-para-backend:
Cenário: O Serviço A precisa acessar dados da API do Serviço B.
Configuração:
O Serviço A é registado como um cliente com um servidor de autorização.
O Serviço A recebe um ID de cliente e um segredo de cliente.
Autenticação:
O Serviço A solicita um token de acesso do servidor de autorização:
Emissão de Token:
O servidor de autorização verifica as credenciais e emite um token de acesso JWT.
Pedido API:
O Serviço A usa o token para solicitar dados do Serviço B:
Validação:
O Serviço B valida o token com o servidor de autorização.
Resposta:
Se validado, o Serviço B devolve os dados solicitados para o Serviço A.
Este processo permite uma comunicação segura e automatizada entre o Serviço A e o Serviço B sem intervenção do utilizador, usando o fluxo de credenciais do cliente OAuth 2.0.
Comunicação dispositivo-para-dispositivo
A comunicação dispositivo-para-dispositivo, particularmente no contexto de IoT (Internet das Coisas), depende muito da autenticação máquina-a-máquina (M2M) para garantir intercâmbio de dados seguro e eficiente.
Por exemplo, como dispositivos de casa inteligente, um termostato inteligente comunica-se com um hub de automação residencial central para ajustar as configurações de temperatura com base nas preferências do utilizador. O termostato usa autenticação M2M para enviar dados de forma segura ao hub e receber comandos, garantindo que apenas dispositivos autorizados possam interagir com o sistema de aquecimento da casa.
Ok, chegaste ao fim deste artigo. Posso obter um resumo rápido? Claro! Aqui estão os principais pontos:
Escopo: As chaves API são amplas, os PATs (Tokens de Acesso Pessoal) são específicos do utilizador e os tokens M2M (Máquina-a-Máquina) são específicos do serviço.
Duração: As chaves API têm longa duração, os PATs têm uma duração menor e os tokens M2M podem variar.
Representação: As chaves API são strings opacas, os PATs podem ser opacos ou estruturados, e os tokens M2M frequentemente utilizam JWTs.
Caso de Uso: As chaves API são para acesso simples à API, os PATs são para operações centradas no utilizador e os tokens M2M são para comunicação serviço-a-serviço.