Dans la plupart des applications modernes à une seule page, nous devons en effet stocker le jeton quelque part du côté client (cas d'utilisation le plus courant - pour garder l'utilisateur connecté après une actualisation de la page).
Il y a un total de 2 options disponibles: Stockage Web (stockage de session, stockage local) et un cookie côté client. Les deux options sont largement utilisées, mais cela ne signifie pas qu'elles sont très sécurisées.
Tom Abbott résume bien la sécurité JWT sessionStorage et localStorage :
Le stockage Web (localStorage / sessionStorage) est accessible via JavaScript sur le même domaine. Cela signifie que tout JavaScript s'exécutant sur votre site aura accès au stockage Web et, de ce fait, peut être vulnérable aux attaques de scripts intersites (XSS) . XSS, en un mot, est un type de vulnérabilité dans lequel un attaquant peut injecter du JavaScript qui s'exécutera sur votre page. Les attaques XSS de base tentent d'injecter du JavaScript via des entrées de formulaire, où l'attaquant le met <script>alert('You are Hacked');</script>
dans un formulaire pour voir s'il est exécuté par le navigateur et peut être consulté par d'autres utilisateurs.
Pour empêcher XSS, la réponse courante consiste à échapper et à encoder toutes les données non approuvées. React le fait (principalement) pour vous! Voici une excellente discussion sur le niveau de protection contre les vulnérabilités XSS dont React est responsable .
Mais cela ne couvre pas toutes les vulnérabilités possibles! Une autre menace potentielle est l'utilisation de JavaScript hébergé sur des CDN ou une infrastructure externe .
Voici à nouveau Tom:
Les applications Web modernes incluent des bibliothèques JavaScript tierces pour les tests A / B, les analyses d'entonnoir / marché et les publicités. Nous utilisons des gestionnaires de packages comme Bower pour importer le code d'autres personnes dans nos applications.
Et si un seul des scripts que vous utilisez est compromis? Un code JavaScript malveillant peut être intégré à la page et le stockage Web est compromis. Ces types d'attaques XSS peuvent obtenir le stockage Web de tout le monde qui visite votre site, à leur insu. C'est probablement pourquoi de nombreuses organisations conseillent de ne pas stocker quoi que ce soit de valeur ou de ne faire confiance à aucune information dans le stockage Web. Cela inclut les identifiants de session et les jetons.
Par conséquent, ma conclusion est qu'en tant que mécanisme de stockage, le stockage Web n'applique aucune norme de sécurité pendant le transfert . Quiconque lit le stockage Web et l'utilise doit faire preuve de diligence raisonnable pour s'assurer qu'il envoie toujours le JWT via HTTPS et jamais via HTTP.