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