Como lidar com o erro auth0 403 sem adicionar código específico em qualquer lugar (Retrofit / okhttp / RxAndroid)

Estou usando o Auth0, que me fornece um JWT (json web token) e um refreshtoken. Eu uso esse JWT nos cabeçalhos http para me comunicar com meu back-end.

Pode acontecer que o servidor me dê uma403, quando decide que o JWT expirou. Nesse caso, posso solicitar ao Auth0 que me emita um novo JWT, usando o refreshtoken. Isso significa que eu chamo o back-end Auth0, passo o token de atualização e me fornece um novo JWT, que eu posso usar nos meus pedidos.

Minha pergunta é: como escrever esse comportamento com eficiência em todo o meu código de rede? Terei alguns pontos de extremidade com os quais conversar e todos poderão retornar o 403.

Eu estou pensando que eu deveria primeiro fazer um interceptador que adiciona o JWT a todos os pedidos.

Em seguida, deve haver um comportamento que detecte o 403, faça uma chamada de rede silenciosamente para Auth0, recuperando o novo JWT. Em seguida, a solicitação original deve ser tentada novamente, com o novo JWT em seus cabeçalhos.

Então, eu preferiria ter esse 403 manipulando algum lugar invisível para o meu outro código e, definitivamente, não precisar reescrevê-lo em qualquer lugar.

Qualquer sugestão sobre como conseguir isso será apreciada.

-

Para ser claro, estou basicamente procurando dicas sobre como conseguir isso usando o RxAndroid Observables. Quando um certo Observable encontra o 403, ele 'injeta' uma nova chamada de rede.

questionAnswers(2)

yourAnswerToTheQuestion