Métodos de autorização de API
Neste artigo, iremos explorar três mecanismos comuns de autorização de API: chaves de API, autenticação básica e tokens OAuth JWT. No final, também falaremos sobre como o Logto pode ajudar a proteger as suas APIs utilizando tokens OAuth JWT.
Introdução
No mundo de hoje, as APIs são a espinha dorsal das aplicações modernas. Elas são o principal meio para acessar dados e funcionalidades de serviços backend. As APIs permitem que diferentes sistemas de software de diferentes partes se comuniquem e compartilhem dados entre si, tornando-se indispensáveis para as empresas. No entanto, as APIs também são um alvo comum para atacantes. A necessidade de proteção das APIs é mais forte do que antes.
A proteção de API é o processo de proteger APIs contra acessos não autorizados, usos indevidos e ataques. É um componente crítico de qualquer estratégia de API. Neste artigo, vamos explorar três mecanismos comuns de proteção de API: chaves de API, autenticação básica e tokens OAuth JWT. No final, também mostraremos como o Logto protege suas APIs utilizando tokens OAuth JWT.
Chaves de API
A chave de API é o método mais simples e amplamente utilizado para proteger APIs. Uma chave de API é uma longa sequência de caracteres gerada pelo provedor da API e compartilhada com usuários autorizados. Esta chave deve ser incluída no cabeçalho da solicitação ao acessar a API. As chaves de API são simples e eficazes para necessidades básicas de segurança. Por exemplo, serviços populares como Google Maps API e AWS fornecem chaves de API para controlar o acesso e monitorar o uso. No entanto, têm limitações em termos de segurança. Elas são frequentemente utilizadas para comunicação máquina-a-máquina.
por exemplo,
Vantagens:
- Simples de implementar: As chaves de API são fáceis de implementar e usar. Elas envolvem anexar uma chave ao cabeçalho da solicitação, tornando-se um método simples para os desenvolvedores e clientes entenderem e utilizarem.
- Fácil de monitorar: As chaves de API são fáceis de monitorar. Você pode acompanhar o uso de cada chave e revogá-las, se necessário.
- Limitação de taxa eficaz: As chaves de API são eficazes para limitação de taxa. Você pode definir um limite no número de solicitações por chave para evitar abusos.
- Adequadas para dados não sensíveis: As chaves de API são adequadas para dados não sensíveis ou APIs publicamente disponíveis, onde os requisitos de segurança são menores.
Desvantagens:
- Segurança limitada: As chaves de API não são seguras o suficiente para dados sensíveis, especialmente para aplicações do lado do cliente. Elas são frequentemente usadas em comunicações máquina-a-máquina.
- Não são adequadas para autenticação de usuários: As chaves de API estão vinculadas a aplicações ou sistemas, não a usuários individuais, o que torna desafiador identificar usuários específicos ou rastrear suas ações.
- Sem expiração de token: As chaves de API são tipicamente estáticas e não expiram. Se uma chave for comprometida, ela poderá ser usada indevidamente indefinidamente, a menos que seja regenerada manualmente.
Autenticação básica
A autenticação básica é outro método comum para proteger APIs. É um esquema de autenticação simples incorporado no protocolo HTTPs. Ela envolve o envio de um nome de usuário e senha no cabeçalho da solicitação. O servidor então verifica as credenciais e retorna o recurso solicitado se elas forem válidas. Por exemplo, muitas aplicações web e APIs RESTful usam autenticação básica como uma maneira rápida e fácil de autenticar usuários. A autenticação básica é mais segura do que as chaves de API, pois utiliza um nome de usuário e senha em vez de uma chave estática. No entanto, ainda não é segura o suficiente para dados sensíveis. Como as credenciais do cliente são transmitidas em texto plano, elas estão sujeitas a interceptação. A autenticação básica é adequada para sistemas internos onde a conexão de rede é segura, por exemplo, comunicação máquina-a-máquina.
por exemplo,
ou
Vantagens:
- Segurança mais forte: A autenticação básica é mais segura do que as chaves de API, pois utiliza um nome de usuário e senha em vez de uma chave estática.
- Amplamente suportada: A autenticação básica é amplamente adotada e suportada pela maioria dos servidores web e navegadores.
- Simplicidade: Assim como as chaves de API, a autenticação básica é relativamente simples de configurar e usar.
Desvantagens:
- Exposição de credenciais: A autenticação básica envia credenciais em texto plano, tornando-as suscetíveis a interceptação se não for utilizada em uma conexão segura (HTTPS).
- Sem expiração de token: A autenticação básica não suporta expiração de token. Se um token for comprometido, ele poderia ser usado indevidamente indefinidamente, a menos que seja regenerado manualmente.
Tokens OAuth JWT
JSON Web Token (JWT), definido pela RFC 7519, é um padrão aberto para a transmissão segura de informações entre as partes como um objeto JSON. Ele é frequentemente utilizado para autenticação e autorização em aplicativos web e APIs.
Um JWT assinado tem o seguinte formato:
Ele consiste em três partes separadas por .
: o cabeçalho, o payload e a assinatura.
Aqui está um exemplo de JWT:
- cabeçalho: contém informações sobre o tipo de token e o algoritmo de hash utilizado para assiná-lo.
- payload: contém as reivindicações (declarações) sobre o usuário e outros dados.
- assinatura: é um hash do cabeçalho e do payload, assinado com uma chave secreta.
OAuth é um padrão aberto abrangente para proteger APIs e para delegação de acesso, frequentemente utilizado como uma maneira para os clientes autorizarem sites ou aplicações a acessar suas informações em outros sites sem fornecer a eles as senhas.
Quando utilizado em conjunto com JWT, os tokens OAuth JWT oferecem uma solução de segurança robusta. Em vez de transmitir informações sensíveis como nomes de usuário e senhas com cada solicitação, os tokens OAuth JWT são emitidos para clientes autorizados após a autenticação bem-sucedida. Esses tokens contêm informações sobre o usuário e suas permissões. Além disso, os tokens JWT são assinados digitalmente para evitar adulterações e podem expirar, proporcionando uma camada extra de segurança.
Um dos principais benefícios dos tokens OAuth JWT é sua flexibilidade. Eles podem ser utilizados para vários tipos de aplicações, incluindo apps para web e dispositivos móveis, soluções de login único e mais. Por exemplo, plataformas de redes sociais importantes como Facebook, Twitter e LinkedIn utilizam tokens OAuth JWT para autenticar usuários e permitir que aplicações de terceiros acessem dados do usuário de forma segura.
Vantagens:
- Segurança aprimorada: Tokens OAuth JWT fornecem um nível mais elevado de segurança. Eles são assinados digitalmente e podem ser criptografados, reduzindo o risco de acesso não autorizado e adulterações de dados.
- Identidade do usuário e controle de acesso: Tokens JWT podem conter informações sobre a identidade do usuário e incluir declarações que especificam quais ações ou recursos um usuário está autorizado a acessar.
- Controle de acesso granular: Tokens JWT podem ser utilizados para implementar controle de acesso granular. Por exemplo, você pode especificar quais recursos um usuário pode acessar e quais ações ele pode realizar nesses recursos.
- Expiração de token: Tokens OAuth JWT podem ser configurados para expirar após um período de tempo determinado, reduzindo o risco de uso indevido.
Desvantagens:
- Complexidade: Tokens OAuth JWT são mais complexos do que chaves de API e autenticação básica. Eles exigem etapas adicionais para configurar e usar.
- Gestão de tokens: Tokens OAuth JWT precisam ser geridos e revogados, se necessário. Isso pode ser desafiador para aplicações de grande escala com muitos usuários e clientes.
- Consumo de recursos: A geração e validação de tokens podem ter algum impacto no desempenho, o que pode ser uma preocupação em cenários de alto tráfego.
Proteção de API Logto
A escolha do método de autenticação depende dos requisitos específicos e considerações de segurança da sua aplicação. As chaves de API são simples, mas menos seguras; a autenticação básica oferece mais segurança, mas carece de recursos de identidade do usuário; enquanto os tokens OAuth JWT fornecem segurança robusta e capacidades de identidade do usuário, mas aumentam a complexidade na implementação e gestão.
O Logto oferece uma forma simples e segura de proteger sua API utilizando tokens OAuth JWT. Ele suporta os padrões OAuth 2.0 e OpenID Connect (OIDC), permitindo que você escolha o método de autenticação que melhor se adequa às suas necessidades. Você pode utilizar o fluxo client_credentials
para comunicação máquina-a-máquina e o fluxo authorization_code
para aplicações web.
Comunicação máquina-a-máquina
O Logto utiliza o fluxo client_credentials
para aplicações do tipo máquina-a-máquina. Este fluxo é adequado para comunicação entre servidores backend, onde o cliente é um cliente confidencial que pode armazenar com segurança as credenciais do cliente. Também é conhecido como "OAuth de duas pernas" porque não envolve um usuário. As credenciais do cliente são utilizadas diretamente como um critério de autorização para obter um token de acesso.
O fluxo de integração é simples e direto:
- Crie um recurso de API no Logto Console.
- Crie um cliente máquina-a-máquina no Logto Console.
- Envie uma solicitação ao endpoint de token do Logto para obter um token de acesso.
- Acesse o recurso protegido com o token de acesso.
Por favor, consulte nossa documentação de integração máquina-a-máquina para mais detalhes.
Aplicações web
Para clientes públicos como aplicações web, o Logto utiliza o fluxo authorization_code
para autenticar usuários. Este fluxo é adequado para aplicações web onde o cliente é um cliente público que não pode armazenar com segurança as credenciais do cliente. Também é conhecido como "OAuth de três pernas" porque envolve um usuário. O usuário é redirecionado para o servidor de autorização para autenticar e autorizar o cliente. O cliente então utiliza o código de autorização para obter um token de acesso.
O fluxo de integração é um pouco mais complexo do que o fluxo de máquina-a-máquina:
Por favor, confira nosso artigo Proteja sua API Express.js com JWT e Logto como um exemplo abrangente de como integrar o Logto com React e acessar as suas APIs do servidor Express utilizando tokens JWT.