3
respostas

Token no cookie do navegador em aplicação REST - Angular 9/10

Como vocês fazem para verificar se o usuário está logado em Angular com uma autenticação via token JWT no cookie do navegador? Ou seja, o backend seta o token no cookie e o cliente Angular deve verificar se o usuário tem o token ou se está autenticado.

Não quero colocar o token no Localstorage. O response do backend é somente uma mensagem de sucesso com o token no cookie.

3 respostas

Fala ai Matias, tudo bem? Isso pode ser feito de N maneiras e N passos, vou te falar uma maneira com alguns passos:

  1. Quando a pessoa realizar o POST para a autenticação a aplicação vai retornar o jwt para que possa ser salvo e enviado nas próximas URL's. Uma vez que tu teve o token retornado, pode salvá-lo no cookie.
  2. Crie um interceptor que vai pegar o token do cookie e setá-lo no cabeçalho das requisições.
  3. Crie um interceptor para pegar o código das resposta da aplicação e caso alguma requisição dê código 403 tu desloga.

Essa seria uma solução mais comum e simples.

Uma outra seria você utilizar o httpOnly para que o JS não consiga ter acesso aos cookies de autenticação, mas, dá um pouco mais de trabalho para ser implementada.

Espero ter ajudado.

tudo bem, Matheus. O que eu quero é com httpOnly, o Cookie que estou falando é o que o javascript não tem acesso. O navegador é quem envia o Cookie de volta para o backend.

1 - O usuário vai logar 2 - A solicitação é enviada do Angular para o backend 3 - O backend retorna com 200 e com o cookie setado no SET-COOKIE 4 - No Angular tenho que dar a cesso a outras páginas do sistema (acho que tenho que retornar com o e-mail ou algo que identifique o usuário) no corpo da requisição. 5 - Talvez fazer algumas funções para verificar a validade do token e um refresh token.

Gostaria que alguém comentasse se já implementou assim.

Fala Matias, no caso do httpOnly com Angular via client não é possível implementar, isso porque cookies com httpOnly não podem ser acessados no client via JavaScript.

Para esse funcionamento sua aplicação precisaria ser SSR (Server Side Rendering), ou seja, ela precisaria ser renderizada e servida pelo servidor.

Espero ter ajudado.