web-dev-qa-db-fra.com

Où stocker un jeton JWT correctement et en toute sécurité dans une application Web?

J'ai entendu parler du stockage sur le navigateur et des cookies, mais je n'arrive pas à déterminer quel est le meilleur moyen sécurisé de stocker un jeton. Je ne sais pas non plus si d'autres méthodes existent ou si des bibliothèques tierces fonctionnent correctement.

Je voudrais avoir une liste exhaustive des méthodes disponibles pour le faire, avec les avantages/inconvénients de chacune et surtout la meilleure, le cas échéant.

9
Alex

Où stocker vos JWT

Avec l'authentification par jeton, vous avez le choix de l'emplacement de stockage du JWT. Nous vous recommandons fortement de stocker vos jetons dans le stockage local/stockage de session ou dans un cookie.

Stockage Web (stockage local/stockage de session)

Généralement, le JWT est placé dans le stockage local des navigateurs et cela fonctionne bien pour la plupart des cas d'utilisation.

Lors de la connexion d'un utilisateur avec un nom d'utilisateur et un mot de passe, le corps de la réponse contient le access_token JWT. Ensuite, vous devez gérer cette réponse dans le code côté client. Ce jeton peut ensuite être stocké dans localStorage ou sessionStorage.

Cliquez ici pour un exemple utilisant sessionStorage

localStorage et sessionStorage étendent les deux Storage. La seule différence entre eux est la persistance des données:

localStorage - les données persistent jusqu'à leur suppression explicite. Les modifications apportées sont enregistrées et disponibles pour toutes les visites actuelles et futures du site.

sessionStorage - Les modifications apportées sont enregistrées et disponibles pour la page actuelle, ainsi que les futures visites du site sur la même fenêtre. Une fois la fenêtre fermée, le stockage est supprimé.

Inconvénients du stockage Web

  • Contrairement aux cookies, le stockage local est mis en sandbox vers un domaine spécifique et ses données ne sont accessibles par aucun autre domaine, y compris les sous-domaines.
  • Le stockage Web est accessible via JavaScript sur le même domaine, de sorte que tout JavaScript exécuté sur votre site aura accès au stockage Web et, à cause de cela, il peut être vulnérable aux attaques de script intersite (XSS).
  • Le développeur doit s'assurer que le JWT est toujours envoyé via HTTPS et jamais HTTP.

Utilisation de cookies

Vous pouvez également utiliser des cookies pour stocker le JWT. La manière exacte de définir un cookie dépend de la langue côté client que vous utilisez.

Il existe différentes options pour contrôler la durée de vie d'un cookie:

  • Les cookies peuvent être détruits après la fermeture du navigateur (cookies de session).
  • Implémentez une vérification côté serveur (généralement effectuée pour vous par le cadre Web utilisé) et vous pouvez implémenter l'expiration ou l'expiration de la fenêtre coulissante.
  • Les cookies peuvent être persistants (non détruits après la fermeture du navigateur) avec une expiration.
  • Les cookies peuvent être lus à la fois par le code JavaScript et le code côté serveur ou uniquement côté serveur si l'indicateur httpOnly est défini.

Inconvénients des cookies

  • La taille maximale d'un cookie n'est que de 4 Ko, ce qui peut être problématique si vous avez de nombreuses revendications attachées au jeton.
  • Les cookies peuvent être des attaques de contrefaçon de requêtes intersites vulnérables (CSRF ou XSRF). Ce type d'attaque se produit lorsqu'un site Web malveillant amène le navigateur Web d'un utilisateur à effectuer une action indésirable sur un site de confiance sur lequel l'utilisateur est actuellement authentifié. Il s'agit d'un exploit de la façon dont le navigateur gère les cookies. L'utilisation de la protection CSRF d'un framework d'application Web fait des cookies une option sécurisée pour le stockage d'un JWT. CSRF peut également être partiellement empêché en vérifiant l'en-tête HTTP Referer et Origin.
  • Il peut être difficile à mettre en œuvre si l'application nécessite un accès interdomaines. Les cookies ont des propriétés supplémentaires (domaine/chemin) qui peuvent être modifiées pour vous permettre de spécifier où le cookie est autorisé à être envoyé.

Article d'origine: https://auth0.com/docs/security/store-tokens#how-to-implement

7
Dmitry S.