Integrando APIs com Autenticação Segura: Desafios e soluções

Integrando APIs com Autenticação Segura: Desafios e soluções

Como desenvolvedores, muitas vezes nos deparamos com a necessidade de integrar nossos sistemas com APIs de terceiros. Essa integração pode trazer uma série de desafios, especialmente quando se trata de autenticação e segurança. Neste blog post, vamos explorar duas abordagens diferentes que utilizamos para integrar APIs de terceiros em nosso sistema, destacando os desafios enfrentados e as soluções encontradas.

Integrando com a API do Workday

Uma das integrações que tivemos que desenvolver foi com a API do Workday, um sistema de gestão de recursos humanos amplamente utilizado. Nesse caso, a autenticação é feita através do protocolo OAuth 2.0, que é um padrão de autenticação amplamente adotado na indústria.

O fluxo de autenticação com a API do Workday segue os seguintes passos:

  1. Primeiro, chamamos um endpoint de token, passando o ID do cliente, o segredo do cliente e um token de atualização fornecido pelo Workday (grant_type=refresh_token).
  2. Esse endpoint nos retorna um token de acesso, que terá uma validade de 1 dia.
  3. Em seguida, usamos esse token de acesso para invocar os endpoints da API do Workday.

Essa abordagem possui algumas particularidades interessantes:

  • Não há envolvimento de um navegador ou front-end, pois essa é uma comunicação de servidor para servidor (API para API).
  • O token de atualização é usado para obter um novo token de acesso quando o anterior expirar, sem a necessidade de envolver o usuário novamente.

Ao analisar essa implementação, algumas questões surgiram:

Por que usar um token de atualização?

Se, ao expirar o token de acesso, precisamos enviar o ID do cliente, o segredo do cliente e o token de atualização, então como isso é mais seguro do que simplesmente enviar o ID do cliente e o segredo?

Após pesquisar mais sobre o protocolo OAuth 2.0, entendemos melhor o papel do token de atualização:

O token de atualização é um tipo de token com uma vida útil muito mais longa do que o token de acesso. Ele é usado nos bastidores para gerar um novo token de acesso quando o anterior expirar, sem a necessidade de envolver o usuário novamente.

Dessa forma, o token de atualização atua como uma "chave" para obter um novo token de acesso, evitando que o cliente (no nosso caso, a API) precise enviar suas credenciais (ID do cliente e segredo) a cada nova solicitação. Isso aumenta a segurança, pois as credenciais sensíveis são usadas apenas uma vez, durante a obtenção do token de atualização inicial.

Integrando com outras APIs de terceiros

Em outra integração que desenvolvemos, lidamos com APIs de terceiros que exigiam autenticação através de ID do cliente e segredo do cliente, enviados como cabeçalhos HTTP.

Nesse caso, o fluxo de autenticação era mais simples:

  1. Chamávamos os endpoints da API de terceiros, enviando o ID do cliente e o segredo do cliente como cabeçalhos HTTP.
  2. A API de terceiros autenticava a solicitação e retornava os dados necessários.

No entanto, recentemente, duas dessas APIs de terceiros passaram a exigir uma abordagem diferente para a autenticação:

API #1: Autenticação com token de acesso

Nessa API, em vez de enviar o ID do cliente e o segredo diretamente, agora precisamos seguir estes passos:

  1. Chamar um endpoint de token, passando o ID do cliente e o segredo.
  2. Esse endpoint nos retorna um token de acesso, que terá uma validade de 7 minutos.
  3. Para chamar os endpoints da API, agora passamos esse token de acesso como um cabeçalho de autorização.

Para lidar com essa mudança, implementamos uma lógica em nosso sistema para garantir que o token de acesso seja regenerado 1 minuto antes de expirar, mantendo assim a integração funcionando sem interrupções.

API #2: Autenticação com token de atualização

Essa segunda API de terceiros também adotou uma abordagem baseada em OAuth 2.0, similar à integração com a API do Workday.

O fluxo de autenticação é o seguinte:

  1. Chamamos um endpoint de token, passando o ID do cliente, o segredo do cliente e um token de atualização fornecido pela API (grant_type=refresh_token).
  2. Esse endpoint nos retorna um token de acesso, que terá uma validade de 1 dia.
  3. Usamos esse token de acesso para invocar os endpoints da API de terceiros.

Novamente, a presença do token de atualização nos fez refletir sobre a segurança dessa abordagem.

Entendendo o papel do token de atualização

Após pesquisar mais sobre o protocolo OAuth 2.0, ficou claro que o token de atualização desempenha um papel importante na segurança da autenticação.

Quando o token de acesso expirar, o cliente (no nosso caso, a API) pode emitir uma nova solicitação usando o token de atualização, sem a necessidade de envolver o usuário novamente. Isso permite que a API obtenha um novo token de acesso, mantendo a integração funcionando de forma contínua.

Essa abordagem é mais segura do que simplesmente enviar as credenciais (ID do cliente e segredo) a cada nova solicitação, pois as credenciais sensíveis são usadas apenas uma vez, durante a obtenção do token de atualização inicial.

Conclusão

Neste blog post, exploramos os desafios e soluções encontrados ao integrar nossos sistemas com APIs de terceiros, com foco na autenticação e segurança.

Aprendemos que o protocolo OAuth 2.0 é amplamente adotado na indústria e que o uso de tokens de atualização desempenha um papel fundamental na segurança da autenticação, evitando que as credenciais sensíveis sejam enviadas a cada nova solicitação.

Ao enfrentar esses desafios, pudemos aprofundar nosso conhecimento sobre autenticação e segurança em integrações de API, o que nos ajudará a desenvolver soluções ainda mais robustas e seguras no futuro.

Próximos passos

Agora que entendemos melhor o papel do token de atualização no protocolo OAuth 2.0, pretendemos:

  • Revisar nossas outras integrações de API para garantir que estejamos adotando as melhores práticas de segurança.
  • Explorar outras funcionalidades e recursos do OAuth 2.0 que possam nos ajudar a melhorar a segurança e a experiência de integração.
  • Compartilhar nossos aprendizados com a equipe de desenvolvimento, para que possamos aplicá-los em futuros projetos.

Estamos empolgados em continuar aprimorando nossas habilidades em integrações de API e em contribuir para a construção de sistemas cada vez mais seguros e confiáveis.

Conteúdo Relacionado

Вернуться к блогу

Комментировать

Обратите внимание, что комментарии проходят одобрение перед публикацией.