Português (Brasil)
  • logto
  • api
  • proteção
  • JWT
  • autorização

Métodos de autorização de API

Neste artigo, exploraremos três mecanismos comuns de autorização de API: chaves de API, autenticação básica e tokens JWT OAuth. No final, também falaremos sobre como o Logto pode ajudá-lo a proteger suas APIs usando tokens JWT OAuth.

Simeng
Simeng
Developer

Introdução

No mundo de hoje, as APIs são a espinha dorsal das aplicações modernas. Elas são a principal forma de acessar dados e funcionalidades de serviços de backend. As APIs permitem que diferentes sistemas de software de diferentes partes se comuniquem e compartilhem dados entre si, fazendo com que sejam indispensáveis para as empresas. No entanto, as APIs também são um alvo comum para atacantes. A necessidade de proteção de APIs é mais forte do que nunca.

A proteção de API é o processo de proteger APIs contra acesso não autorizado, uso indevido e ataques. É um componente crítico de qualquer estratégia de API. Neste artigo, exploraremos três mecanismos comuns de proteção de API: chaves de API, autenticação básica e tokens JWT OAuth. No final, também mostraremos como o Logto protege suas APIs usando tokens JWT OAuth.

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 os usuários autorizados. Essa chave deve ser incluída no cabeçalho da requisiçã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 o Google Maps API e a AWS fornecem chaves de API para controlar o acesso e monitorar o uso. No entanto, elas têm limitações em termos de segurança. Elas são frequentemente usadas para comunicação de máquina para máquina.

e.g.

Prós:

  • Simples de implementar: As chaves de API são fáceis de implementar e usar. Elas envolvem a anexação de uma chave ao cabeçalho da requisição, tornando-se um método direto para desenvolvedores e clientes entenderem e utilizarem.
  • Fáceis de monitorar: As chaves de API são fáceis de monitorar. Você pode rastrear 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 requisições por chave para prevenir 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.

Contras:

  • 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 de máquina para máquina.
  • Não adequadas para autenticação de usuário: As chaves de API estão vinculadas a aplicações ou sistemas, e não a usuários individuais, tornando difícil 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 pode 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 embutido no protocolo HTTPs. Envolve o envio de um nome de usuário e senha no cabeçalho da requisição. O servidor então verifica as credenciais e retorna o recurso solicitado se 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 porque usa 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 simples, são suscetíveis à interceptação. A autenticação básica é adequada para sistemas internos onde a conexão de rede é segura, como em comunicações de máquina para máquina.

e.g.

or

Prós:

  • Segurança mais robusta: A autenticação básica é mais segura do que as chaves de API porque usa um nome de usuário e senha em vez de uma chave estática.
  • Ampla compatibilidade: 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.

Contras:

  • Exposição de credenciais: A autenticação básica envia credenciais em texto simples, tornando-se suscetíveis à interceptação se não for usada 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 pode ser usado indevidamente indefinidamente, a menos que seja regenerado manualmente.

Tokens JWT OAuth

JSON Web Token (JWT), definido pelo RFC 7519, é um padrão aberto para transmitir informações de forma segura entre as partes como um objeto JSON. É comumente usado para autenticação e autorização em aplicações web e APIs.

Um JWT assinado possui o seguinte formato:

Consiste em três partes separadas por .: o cabeçalho, o payload e a assinatura.

Aqui está um exemplo de um JWT:

  • cabeçalho: contém informações sobre o tipo de token e o algoritmo de hash usado para assiná-lo.
  • payload: contém as declarações (claims) sobre o usuário e outros dados.
  • assinatura: é um hash do cabeçalho e payload, assinado com uma chave secreta.

OAuth é um padrão aberto abrangente para proteger APIs e para delegação de acesso, comumente usado como uma forma de clientes permitirem que sites ou aplicações acessem suas informações em outros sites sem fornecer suas senhas.

Quando usados em conjunto com JWT, os tokens JWT OAuth oferecem uma solução de segurança robusta. Em vez de transmitir informações sensíveis como nomes de usuário e senhas em cada requisição, os tokens JWT OAuth são emitidos para clientes autorizados após uma 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 JWT OAuth é a sua flexibilidade. Eles podem ser usados para vários tipos de aplicações, incluindo aplicativos web e móveis, soluções de login único (single sign-on) e mais. Por exemplo, grandes plataformas de mídia social como Facebook, Twitter e LinkedIn usam tokens JWT OAuth para autenticar usuários e permitir que aplicativos de terceiros acessem dados de usuários com segurança.

Prós:

  • Segurança aprimorada: Os tokens JWT OAuth fornecem um nível mais alto de segurança. Eles são assinados digitalmente e podem ser criptografados, reduzindo o risco de acesso não autorizado e adulteração de dados.
  • Identidade do usuário e controle de acesso: Os tokens JWT podem carregar informações de identidade do usuário e incluir declarações (claims) que especificam quais ações ou recursos um usuário está autorizado a acessar.
  • Controle de acesso refinado: Os tokens JWT podem ser usados para implementar um controle de acesso refinado. 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: Os tokens JWT OAuth podem ser configurados para expirar após um determinado período de tempo, reduzindo o risco de uso indevido.

Contras:

  • Complexidade: Os tokens JWT OAuth são mais complexos do que as chaves de API e a autenticação básica. Eles exigem etapas adicionais para serem configurados e usados.
  • Gestão de tokens: Os tokens JWT OAuth precisam ser gerenciados e revogados, se necessário. Isso pode ser desafiador para aplicações em larga escala com muitos usuários e clientes.
  • Consumo de recursos: Gerar e validar tokens pode ter algum impacto no desempenho, o que pode ser uma preocupação em cenários de tráfego intenso.

Proteção de API Logto

A escolha do método de autenticação depende dos requisitos específicos e das considerações de segurança de 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 de usuário; enquanto os tokens JWT OAuth fornecem segurança robusta e recursos de identidade de usuário, mas aumentam a complexidade na implementação e gestão.

O Logto oferece uma maneira simples e segura de proteger sua API usando tokens JWT OAuth. Ele suporta ambos os padrões OAuth 2.0 e OpenID Connect (OIDC), permitindo que você escolha o método de autenticação que melhor se adapta às suas necessidades. Você pode usar o fluxo client_credentials para comunicação de máquina para máquina e o fluxo authorization_code para aplicações web.

Comunicação de máquina para máquina

O Logto usa o fluxo client_credentials para aplicações do tipo máquina-para-máquina. Este fluxo é adequado para comunicação entre servidores de backend, onde o cliente é um cliente confidencial que pode armazenar com segurança as credenciais do cliente. Também é conhecido como o "OAuth de duas pernas" porque não envolve o usuário. As credenciais do cliente são usadas diretamente como uma concessão de autorização para obter um token de acesso.

O fluxo de integração é simples e direto:

  1. Crie um recurso de API no Console Logto.
  2. Crie um cliente de máquina-para-máquina no Console Logto.
  3. Envie uma requisição ao endpoint de token do Logto para obter um token de acesso.
  1. Acesse o recurso protegido com o token de acesso.

Por favor, consulte nossa documentação de integração de máquina-para-máquina para mais detalhes.

Aplicações web

Para clientes públicos como aplicações web, o Logto usa 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 o "OAuth de três pernas" porque envolve um usuário. O usuário é redirecionado ao servidor de autorização para autenticar e autorizar o cliente. O cliente então usa o código de autorização para obter um token de acesso.

O fluxo de integração é ligeiramente mais complicado do que o fluxo de máquina-para-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 suas APIs do servidor Express usando tokens JWT.