2015-07-30 1 views
9

Je regardais à travers les questions mais je n'ai rien trouvé qui puisse résoudre mon doute. J'ai trouvé de nombreuses informations sur JWT, mais pas beaucoup en comparant les avantages que JWT pouvait offrir à la génération d'un jeton personnalisé aux demandes d'authentification contre les services REST.JWT (Jeton Json) Vs Custom Token

Quel est l'avantage d'utiliser un JWT (Json Web Token) plutôt qu'un jeton de génération personnalisé? Pour générer le jeton personnalisé, je pourrais utiliser une stratégie de hachage ou un générateur de nombres aléatoires unique.

Si je génère un jeton personnalisé, Puis-je avoir des problèmes de sécurité? Recommanderiez-vous l'utilisation d'un autre mécanisme d'authentification?

Merci!

+0

Bonjour Deibys, j'ai la même question, avez-vous trouvé une réponse convaincante, et quelle approche avez-vous finalement appliquée? merci –

Répondre

8

JWT tokens contenir des revendications, qui sont des déclarations sur le sujet (par exemple, l'utilisateur connecté). Ces instructions peuvent être des noms, des e-mails, des rôles, etc. Les jetons JWT sont signés numériquement et ne sont pas vulnérables aux attaques CSRF.

Ces deux caractéristiques garantissent que le service recevant le jeton n'a pas besoin de revenir au serveur d'authentification émetteur pour vérifier la validité du jeton ou obtenir des informations sur le sujet.

Cela augmente la capacité d'un système utilisant des jetons JWT à évoluer de manière significative. Les jetons JWT nécessitent un canal de transport sécurisé (HTTPS). L'inconvénient de ceci est que les jetons ne peuvent pas être révoqués (car il n'y a pas de serveur central protégeant ces jetons). C'est pourquoi les jetons ont généralement une durée de vie courte. D'autre part, les jetons détenant un session id ont besoin de contacter le serveur d'authentification pour valider le jeton (généralement la recherche dans la base de données) et récupérer des informations sur le sujet (une autre recherche dans la base de données).

La validation de HMAC tokens nécessite la connaissance de la clé secrète utilisée pour générer le jeton. En règle générale, le service de réception (votre API) doit contacter le serveur d'authentification car ce serveur est l'endroit où le secret est conservé.

Les jetons HMAC et les identifiants de session sont généralement stockés dans des cookies. Les cookies ne peuvent pas être utilisés pour les appels de service entre domaines et doivent être protégés contre les attaques CSRF.

+3

JWT lui-même ne fournit aucune mesure contre les attaques CSRF ou XSS. La signature est une mesure contre la falsification du jeton. Le jeton peut toujours être volé même s'il est signé. Stormpath a un bon article décrivant où vous devriez stocker les jetons JWT et comment vous protéger contre CSFR et XSS. https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage/ –

+4

Les jetons JWT eux-mêmes ne protègent pas contre CSRF, mais ils sont généralement utilisés dans un support schéma d'authentification. Le schéma d'authentification du support n'est pas vulnérable à CSRF. J'ai lu l'article de Stormpath, mais je ne suis pas d'accord avec leurs recommandations.Si vous stockez des jetons JWT dans un cookie, il est plus difficile pour les clients non navigateurs de consommer votre API et il est difficile d'avoir vos API dans des domaines différents. – MvdD

+0

Si je veux rendre l'application indépendante de la chaîne, je pense que l'utilisation de cookies n'est pas une sage décision, j'ai entendu dire que certains appareils mobiles ont des problèmes avec les cookies. En fonction de l'application client, ils décideront comment stocker le jeton (pour l'application de navigateur, je suppose que le stockage de session web html5 est l'option). Maintenant, j'ai besoin d'invalider les jetons par besoin, donc du côté serveur, j'ai besoin d'avoir du datastorage pour eux. Considérez-vous qu'il est correct de les enregistrer dans une base de données? – Deibys

1

De Django REST framework documentation,

JSON Web Token est une norme relativement nouvelle qui peut être utilisé pour l'authentification à base de jetons. Contrairement au schéma TokenAuthentication intégré, l'authentification JWT n'a pas besoin d'utiliser une base de données pour valider un jeton.