TL;DR Si vous avez des scénarios très simples, comme une application client unique, une API unique, il n'est peut-être pas rentable d'adopter OAuth 2.0. En revanche, si vous avez beaucoup de clients différents (navigateur, mobile natif, côté serveur, etc.), respecter les règles d'OAuth 2.0 peut rendre la situation plus facile à gérer que d'essayer de mettre en place votre propre système.
Comme indiqué dans une autre réponse, JWT ( Apprendre les jetons Web JSON ) n'est qu'un format de jeton, il définit un mécanisme compact et autonome pour transmettre des données entre des parties d'une manière qui peut être vérifiée et fiable car elle est signée numériquement. En outre, les règles d'encodage d'un JWT rendent ces jetons très faciles à utiliser dans le contexte de HTTP.
Étant donné qu'ils sont autonomes (le jeton réel contient des informations sur un sujet donné), ils constituent également un bon choix pour la mise en œuvre de mécanismes d'authentification apatrides (alias Regarde maman, pas de séances ! ). Lorsque l'on suit cette voie et que la seule chose qu'une partie doit présenter pour obtenir l'accès à une ressource protégée est le jeton lui-même, le jeton en question peut être appelé jeton porteur.
En pratique, ce que vous faites peut déjà être classé comme basé sur des jetons au porteur. Cependant, tenez compte du fait que vous n'utilisez pas de jetons de porteur comme spécifié par les spécifications liées à OAuth 2.0 (cf. RFC 6750 ). Cela impliquerait, en s'appuyant sur le Authorization
et en utilisant l'en-tête HTTP Bearer
schéma d'authentification.
En ce qui concerne l'utilisation de JWT pour empêcher CSRF, sans connaître les détails exacts, il est difficile de vérifier la validité de cette pratique, mais pour être honnête, elle ne semble pas correcte et/ou utile. L'article suivant ( Cookies et jetons : Le guide définitif ) peut être une lecture utile sur ce sujet, en particulier l'article intitulé Protection contre les XSS et XSRF section.
Un dernier conseil, même si vous n'avez pas besoin de passer à la version complète d'OAuth 2.0. Il est fortement recommandé de transmettre votre jeton d'accès dans l'interface de l'utilisateur. Authorization
au lieu d'utiliser des en-têtes personnalisés . S'il s'agit vraiment de jetons porteurs, suivez les règles de la RFC 6750. Sinon, vous pouvez toujours créer un schéma d'authentification personnalisé et utiliser cet en-tête.
Les en-têtes d'autorisation sont reconnus et traités spécialement par les proxies et les serveurs HTTP. Ainsi, l'utilisation de ces en-têtes pour envoyer des jetons d'accès aux serveurs de ressources réduit la probabilité de fuite ou de stockage involontaire des demandes authentifiées en général, et en particulier des en-têtes d'autorisation.
(source : RFC 6819, section 5.4.1 )