[Carol] UI deve utilizar refresh_token quando o authorization expirar

Description

01 - STAKEHOLDER (quem valida e esclarece):

@Robson Thanael Poffo @MARCOS STUMPF


02 - PROBLEMA (cenário e/ou dor):

Estamos com logouts frequentes, gerando a necessidade de informar o 2FA frequentemente por usuários


03 - OBJETIVO (solução proposta):

FE deve, ao constatar que o token expirou, utilizar o refresh_token para gerar um novo Authorization e um novo refresh_token.

Endpoint:

curl -X 'POST' \  'https://poffo.carol.ai/api/v3/oauth2/token' \  -H 'accept: application/json' \  -H 'Content-Type: application/x-www-form-urlencoded' \  -H 'Authorization: Bearer TOKEN' \  -d 'grant_type=refresh_token&refresh_token=REFRESH_TOKEN'

Retorno:

{  "access_token": "NOVO_TOKEN",  "client_id": "2552811ce1b8b801823184b935a6c4bf",  "expires_in": 3599,  "mfa_enabled": false,  "mfa_token": "",  "refresh_token": "NOVO_REFRESH",  "state": "",  "timeIssuedInMillis": 1764125836173,  "token_type": "bearer"}


04 - QUEM PODE USAR (perfis de usuários):

Usuários em geral


05 - ASSETS (links e arquivos relevantes):

Não necessário.


06 - CRITÉRIOS DE ACEITE:

  • Adequar a criação do access e refresh tokens ao OAuth2.0 V5

  • BE já possui Refresh Token implementado

  • Garantir a manutenção da sessão após atingir a expiração de 1 hora do access token, por meio da obtenção de um novo access token e refresh token.

  • Propor como o time do clockin deve trabalhar com o token de autenticação:

    • Eu observei que eles utilizam o mesmo local storage.

    • Alguma pratica para que quando a Carol renove o token evite que o Backoffice perca o sincronismo?

    • Eles podem manter o contexto do app do Backoffice sincronizado automaticamente com o localstorage para manter a integração entre ambos os apps?

  • Fluxo validado:

    • Duas sessões Carol não interferem uma na outra.

    • Quando a mesma tenant é aberta em browsers diferentes um não impacta no outro (tokens diferentes, refresh token diferente).

    • Ao fazer o refresh token em uma sessão, não afeta a outra sessão.