Na maioria dos aplicativos modernos de página única, precisamos armazenar o token em algum lugar do lado do cliente (caso de uso mais comum - para manter o usuário conectado após uma atualização da página).
Há um total de 2 opções disponíveis: Armazenamento na Web (armazenamento de sessão, armazenamento local) e um cookie do lado do cliente. Ambas as opções são amplamente usadas, mas isso não significa que elas são muito seguras.
Tom Abbott resume bem a segurança sessionStorage e localStorage do JWT :
O armazenamento na Web (localStorage / sessionStorage) pode ser acessado por meio de JavaScript no mesmo domínio. Isso significa que qualquer JavaScript em execução no seu site terá acesso ao armazenamento na Web e, por isso, pode ser vulnerável a ataques de script entre sites (XSS) . Em resumo, o XSS é um tipo de vulnerabilidade em que um invasor pode injetar JavaScript que será executado na sua página. Os ataques XSS básicos tentam injetar JavaScript através de entradas de formulário, onde o invasor o coloca <script>alert('You are Hacked');</script>
em um formulário para ver se ele é executado pelo navegador e pode ser visualizado por outros usuários.
Para evitar o XSS, a resposta comum é escapar e codificar todos os dados não confiáveis. Reagir (principalmente) faz isso por você! Aqui está uma ótima discussão sobre a responsabilidade pela qual a proteção contra vulnerabilidades XSS é responsável pelo React .
Mas isso não cobre todas as vulnerabilidades possíveis! Outra ameaça em potencial é o uso de JavaScript hospedado em CDNs ou em infraestrutura externa .
Aqui está o Tom novamente:
Os aplicativos da Web modernos incluem bibliotecas JavaScript de terceiros para testes A / B, análise de funil / mercado e anúncios. Usamos gerenciadores de pacotes como o Bower para importar o código de outras pessoas em nossos aplicativos.
E se apenas um dos scripts que você usa estiver comprometido? JavaScript malicioso pode ser incorporado na página e o armazenamento na Web é comprometido. Esses tipos de ataques XSS podem obter o armazenamento na Web de todos que visitam seu site, sem o conhecimento deles. É provavelmente por isso que várias organizações aconselham a não armazenar nada de valor ou confiar em qualquer informação no armazenamento na web. Isso inclui identificadores de sessão e tokens.
Portanto, minha conclusão é que, como mecanismo de armazenamento, o Armazenamento na Web não impõe nenhum padrão seguro durante a transferência . Quem lê o Armazenamento da Web e o utiliza deve fazer a devida diligência para garantir que sempre envie o JWT por HTTPS e nunca por HTTP.