web-dev-qa-db-fra.com

Angular 2/4 où stocker le jeton

J'ai une API de repos pour générer un jeton, que j'utilise dans angular 4 côté client, mais la question est de savoir où stocker ce jeton.

Sur Internet, j'ai constaté que je peux stocker dans le stockage local ou dans le cookie.

Donc, ma question est, si le jeton de magasin est le stockage local par exemple, et que je viens de copier le jeton valide à partir d'un autre navigateur, alors j'aurai un jeton valide, donc il y a une sécurité de stockage de jeton comme ça, et fondamentalement le même avec des cookies, ou peut-être que j'ai manqué des informations importantes?

17
user2870934

Voici un article complet sur les Tokens/Cookies qui peut vous apporter beaucoup de connaissances sur ce sujet: auth0: Cookies VS Tokens

Je vais citer les parties les plus importantes pour vous faire comprendre ce qui va suivre:

Deux des vecteurs d'attaque les plus courants auxquels sont confrontés les sites Web sont Cross Site Scripting (XSS) et Cross Site Request Forgery (XSRF ou CSRF).

Cross Site Scripting) se produisent lorsqu'une entité externe est en mesure d'exécuter du code sur votre site Web ou votre application.

Les attaques de type Cross Site Request Forgery ne sont pas un problème si vous utilisez JWT avec un stockage local. En revanche, si votre cas d'utilisation vous oblige à stocker le JWT dans un cookie, vous devrez vous protéger contre XSRF.

Notre CTO a fait valoir dans le passé que les attaques XSS sont beaucoup plus faciles à gérer que les attaques XSRF car elles sont généralement mieux comprises.

Donc, pour résumer:

  • [~ # ~] xss [~ # ~] les attaques sont un problème avec les jetons et LocalStorage . Mais ce n'est pas parce que Angular désinfecte tout, empêchant efficacement [~ # ~] xss [~ # ~] ) les attaques. ( https://angular.io/guide/security#angulars-cross-site-scripting-security-model )
  • [~ # ~] xsrf [~ # ~] les attaques sont un problème avec les cookies , et vous devrez configurer votre propre cadre de sécurité pour y faire face.

Par conséquent, je recommanderais une approche de jeton JWT standard pour gérer votre jeton. Étant donné que votre jeton est signé au format [~ # ~] jwt [~ # ~] , c'est la solution la plus sûre à mon avis. Bien sûr, un jeton standard devrait être crypté ou signé (pas la même) pour être vraiment sûr.

Vraiment facile à installer et à gérer avec les bibliothèques appropriées (telles que https://github.com/auth0/angular2-jwt )


Pour aller plus loin: J'imagine que votre token serait utilisé pour l'authentification, et sachez que les gens ont déjà travaillé avec cela et savent quelles sont les bonnes/mauvaises pratiques de les utiliser.

Vous devriez jeter un œil à la façon dont les authentifications sont gérées à partir de sites Web (tels que Twitter/Facebook, etc.) où ils utilisent des jetons d'actualisation . Voici quelques liens supplémentaires qui pourraient vous intéresser:


EDIT: Liens supplémentaires sur les meilleures pratiques avec JWT:

12
Alex Beugnet

Il s'agit davantage de la façon dont vous allez le valider que de la façon dont vous stockez le jeton, des majors de sécurité que vous avez prises pour valider le même côté serveur.

Vous devez vous assurer que la demande provient d'un client valide et non d'une source malveillante, si vous disposez d'une API compatible CORS.

Si vous utilisez Token pour stocker des informations confidentielles, vous devez les chiffrer avant de les stocker.

J'espère que cela t'aides!!

0
Madhu Ranjan