Cache

Outra boa prática é a de fazer-se da utilização de um cache distribuído para armazenar o token de acesso previamente gerado, a fim de reutiliza-lo sem que seja preciso gerar um novo token a cada requisição para as nossas apis.

Recomenda-se o uso de alguma política de cache para os tokens de acesso, visando a diminuição da quantidade de chamadas para geração dos tokens, aumentando a performance dos sistemas envolvidos e diminuindo a quantidade de uso de rede.

Quando um único cliente faz muitas chamadas para a geração de um token, ele irá gerar muitas seções em aberto dentro dos nossos sistemas, correndo o risco de ser identificado como um potencial ataque e ficar bloqueado temporariamente e consequentemente quaisquer chamada à nossas apis será impactada.

O pseudo código abaixo traz uma sugestão para implementação do fluxo de autenticação:

// antes de qualquer requisição: 

// busca o token no cache
token_response = cache.get('token-response-key');

// se não existe o token no cache

SE(token_response é nulo)
token_response = POST.getAccessToken(credenciais);
cache.set('token-response-key', token_response);

// caso access_token expirado
SE(token_response.access_token.jwtDecode().exp <= date.now())
// caso refresh_token expirado
SE(token_response.refresh_token.jwtDecode().exp <= date.now())
token_response = POST.getAccessToken(credenciais);
cache.set('token-response-key', token_response);
SENAO
token_response = POST.getRefreshToken(credenciais);
cache.set('token-response-key', token_response);

// fazer a requisição em questão
GET Rchlo.Catalog.Order('Authorization: ' + token_response.access_token)