Como personificar outras pessoas nos consumos de APIs

Visão geral

Como vimos no capítulo sobre autenticação de API's com tokens, de maneira resumida:

  • Para realizar qualquer operação em uma API do Zeev, é preciso um token;

  • Um token está relacionado a uma pessoa usuária do sistema, ativa;

  • Somente poderão ser realizadas operações de API que essa pessoa, dona do token, poderia fazer, ela mesma, através da interface do sistema;

  • Recomenda-se a criação de um usuário específico, de integração, para o consumo de API's;

  • Recomenda-se armazenar o token de autenticação de pessoa em um arquivo de configuração seguro de seu sistema;

Cenário

Se o seu sistema externo irá armazenar somente um token, de um usuário de integração, e o token só pode realizar operações que esse usuário possui permissão, como utilizar API's para realizar operações vinculadas a outros usuários do sistema, como:

  • Abrir uma solicitação em nome de outro usuário do sistema?

  • Finalizar uma tarefa pendente com outro usuário do sistema?

A solução consiste em:

  • Vincular o seu usuário de integração a um grupo de manutenção que possua permissão de personificar outras pessoas;

  • De posse de seu token do usuário de integração, realizar uma chamada a API de personificar outro usuário. Essa API irá receber o nome de usuário que se deseja personificar e retornará um novo token, temporário;

  • De posse do novo token, realize a operação em nome do usuário terceiro;

Abaixo, temos um exemplo de código onde, a partir de um token TOKEN-DE-AUTENTICACAO, personifica-se e obtem-se um novo token, relacionado ao usuário "joao.dias"

//javascript
async function fetchData() {

  try {

    const impersonateLogin = "joao.dias";
    const impersonateUrl = `https://seu_endereco.do.zeev/api/2/tokens/impersonate/${impersonateLogin}`
    const impersonateHeaders = {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer TOKEN-DE-AUTENTICACAO'
    };

    const impersonateResponse = await fetch(impersonateUrl , { headers: impersonateHeaders });
    const impersonateData = await impersonateResponse.json();
    const newToken = impersonateData.impersonate.temporaryToken;
    
    //Realize novas operações a partir daqui usando o newToken;
    
  } catch (error) {
    console.error('Error:', error);
  }
}

fetchData();

Mais detalhes sobre como personificar outras usuárias nos consumos de APIs podem ser vistos no vídeo abaixo.

Atualizado