TL; DR
Si vous avez des scénarios très simples, comme une seule application cliente, une seule API, alors il pourrait ne pas être avantageux de passer à OAuth 2.0, d'autre part, de nombreux clients différents (basés sur un navigateur, mobile natif, côté serveur) , etc.), puis s'en tenir aux règles OAuth 2.0 pourrait le rendre plus gérable que d'essayer de faire rouler votre propre système.
Comme indiqué dans une autre réponse, JWT ( Learn JSON Web Tokens ) n'est qu'un format de jeton, il définit un mécanisme compact et autonome pour la transmission de données entre les parties d'une manière qui peut être vérifiée et approuvée car elle est signée numériquement. De plus, les règles de codage d'un JWT rendent également ces jetons très faciles à utiliser dans le contexte de HTTP.
Étant autonomes (le jeton réel contient des informations sur un sujet donné), ils sont également un bon choix pour implémenter des mécanismes d'authentification sans état (aka Look mum, no sessions! ). En empruntant cette route et la seule chose qu'une partie doit présenter pour avoir accès à une ressource protégée est le jeton lui-même, le jeton en question peut être appelé un jeton porteur.
En pratique, ce que vous faites peut déjà être classé comme basé sur des jetons de porteur. Cependant, considérez que vous n'utilisez pas de jetons de support comme spécifié par les spécifications liées à OAuth 2.0 (voir RFC 6750 ). Cela impliquerait de s'appuyer sur l' Authorization
en-tête HTTP et d'utiliser le Bearer
schéma d'authentification.
Concernant l'utilisation du JWT pour empêcher la CSRF sans connaître les détails exacts, il est difficile de vérifier la validité de cette pratique, mais pour être honnête, cela ne semble pas correct et / ou utile. L'article suivant ( Cookies vs Tokens: The Definitive Guide ) peut être une lecture utile à ce sujet, en particulier la section Protection XSS et XSRF .
Un dernier conseil, même si vous n'avez pas besoin de passer à OAuth 2.0 complet, je vous recommande fortement de passer votre jeton d'accès dans l'en- Authorization
tête au lieu d' utiliser des en-têtes personnalisés . S'ils sont vraiment des jetons porteurs, suivez les règles de la RFC 6750, sinon, vous pouvez toujours créer un schéma d'authentification personnalisé et toujours utiliser cet en-tête.
Les en-têtes d'autorisation sont reconnus et spécialement traités par les serveurs proxy 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 )
OAuth 2.0 définit un protocole, c'est-à-dire spécifie comment les jetons sont transférés, JWT définit un format de jeton.
OAuth 2.0 et «authentification JWT» ont une apparence similaire en ce qui concerne la (2e) étape où le client présente le jeton au serveur de ressources: le jeton est passé dans un en-tête.
Mais "l'authentification JWT" n'est pas un standard et ne spécifie pas comment le client obtient le jeton en premier lieu (la 1ère étape). C'est de là que vient la complexité perçue de OAuth: elle définit également diverses façons dont le client peut obtenir un jeton d'accès à partir de quelque chose qui est appelé un serveur d'autorisation.
La vraie différence est donc que JWT n'est qu'un format de jeton, OAuth 2.0 est un protocole (qui peut utiliser un JWT comme format de jeton).
la source
Premièrement, nous devons différencier JWT et OAuth. Fondamentalement, JWT est un format de jeton. OAuth est un protocole d'autorisation qui peut utiliser JWT comme jeton. OAuth utilise le stockage côté serveur et côté client. Si vous souhaitez vous déconnecter réellement, vous devez utiliser OAuth2. L'authentification avec le jeton JWT ne peut pas se déconnecter réellement. Parce que vous n'avez pas de serveur d'authentification qui assure le suivi des jetons. Si vous souhaitez fournir une API à des clients tiers, vous devez également utiliser OAuth2. OAuth2 est très flexible. L'implémentation de JWT est très facile et ne prend pas longtemps à implémenter. Si votre application a besoin de ce type de flexibilité, vous devriez opter pour OAuth2. Mais si vous n'avez pas besoin de ce scénario de cas d'utilisation, l'implémentation d'OAuth2 est une perte de temps.
Le jeton XSRF est toujours envoyé au client dans chaque en-tête de réponse. Peu importe si un jeton CSRF est envoyé dans un jeton JWT ou non, car le jeton CSRF est sécurisé avec lui-même. Par conséquent, l'envoi d'un jeton CSRF dans JWT n'est pas nécessaire.
la source
JWT (JSON Web Tokens) - Ce n'est qu'un format de jeton. Les jetons JWT sont des structures de données codées JSON qui contiennent des informations sur l'émetteur, le sujet (revendications), le délai d'expiration, etc. JWT est plus simple que SAML 1.1 / 2.0 et pris en charge par tous les appareils et il est plus puissant que SWT (Simple Web Token).
OAuth2 - OAuth2 résout un problème selon lequel l'utilisateur souhaite accéder aux données à l'aide d'un logiciel client comme les applications Web basées sur la navigation, les applications mobiles natives ou les applications de bureau. OAuth2 est juste pour l'autorisation, le logiciel client peut être autorisé à accéder aux ressources au nom de l'utilisateur final à l'aide d'un jeton d'accès.
OpenID Connect - OpenID Connect s'appuie sur OAuth2 et ajoute une authentification. OpenID Connect ajoute des contraintes à OAuth2 comme UserInfo Endpoint, ID Token, la découverte et l'enregistrement dynamique des fournisseurs OpenID Connect et la gestion de session. JWT est le format obligatoire pour le jeton.
Protection CSRF - Vous n'avez pas besoin de mettre en œuvre la protection CSRF si vous ne stockez pas de jeton dans le cookie du navigateur.
Vous pouvez lire plus de détails ici http://proficientblog.com/microservices-security/
la source
Il semble que tous ceux qui ont répondu ici ont raté le point discutable d'OAUTH
De Wikipédia
Le point clé ici est
access delegation
. Pourquoi est-ce que quelqu'un créerait OAUTH quand il y a une authentification basée sur id / pwd, soutenue par une authentification multifactorielle comme les OTP et peut être sécurisée par des JWT qui sont utilisés pour sécuriser l'accès aux chemins (comme les étendues dans OAUTH) et définir l'expiration du accèsIl n'y a aucun intérêt à utiliser OAUTH si les consommateurs accèdent à leurs ressources (vos points de terminaison) uniquement via leurs sites Web (ou applications) de confiance qui sont à nouveau hébergés sur vos points de terminaison
Vous ne pouvez accéder à l'authentification OAUTH que si vous êtes
OAUTH provider
dans le cas où les propriétaires de ressources (utilisateurs) souhaitent accéder à leurs (vos) ressources (points de terminaison) via un client tiers (application externe). Et il est exactement créé dans le même but bien que vous puissiez en abuser en généralAutre remarque importante:
vous utilisez librement le mot
authentication
pour JWT et OAUTH mais vous ne fournissez ni le mécanisme d'authentification. Oui, l'un est un mécanisme de jeton et l'autre est un protocole mais une fois authentifiés, ils ne sont utilisés que pour l'autorisation (gestion des accès). Vous devez sauvegarder OAUTH avec une authentification de type OPENID ou vos propres informations d'identification clientla source
trouver les principales différences entre JWT et OAuth
OAuth 2.0 définit un protocole et JWT définit un format de jeton.
OAuth peut utiliser JWT comme format de jeton ou jeton d'accès qui est un jeton porteur.
La connexion OpenID utilise principalement JWT comme format de jeton.
la source
JWT est une norme ouverte qui définit un moyen compact et autonome de transmission sécurisée d'informations entre les parties. Il s'agit d'un protocole d'authentification dans lequel nous autorisons le transfert de revendications codées (jetons) entre deux parties (client et serveur) et le jeton est émis lors de l'identification d'un client. À chaque demande ultérieure, nous envoyons le jeton.
Tandis qu'OAuth2 est un cadre d'autorisation, où il a des procédures générales et des configurations définies par le cadre. JWT peut être utilisé comme mécanisme dans OAuth2.
Vous pouvez en savoir plus à ce sujet ici
OAuth ou JWT? Lequel utiliser et pourquoi?
la source
La question est courante, mais elle n'est pas tout à fait sensée. JWT est un type de jeton et OAuth est un framework qui décrit comment distribuer des jetons.
Qu'entendons-nous par «cadre»? Juste la séquence de demandes et de réponses, et les formats de celles-ci, qui peuvent et doivent être utilisés pour demander des jetons. OAuthv2 décrit des «flux» distincts ou des types d'octroi pour différents scénarios et possède différentes extensions (comme PKCE) pour étendre la sécurité de flux particuliers.
Le résultat d'une demande de jeton via une autorisation OAuthV2 est ... un jeton. Cette chose est ensuite utilisée comme un "jeton porteur", ce qui signifie que toute partie qui détient le jeton peut le présenter lors d'une demande de service api (par exemple, "quel est le solde sur ma carte de valeur stockée?"). En tant que jeton au porteur, cela fonctionne comme de l'argent liquide. Si vous le tenez, vous pouvez l'utiliser. (Bien que contrairement à l'argent comptant, un jeton ne soit pas utilisé et perdu. Peut-être une meilleure analogie est-elle un billet pour une journée dans le système de transport en commun ou un billet toute la journée à Disneyworld.)
JWT est un type particulier de jeton, et JWT peut absolument être utilisé comme jeton OAuth Bearer. En fait, c'est la pratique la plus courante. À la lumière de cela, "JWT vs OAuth" est une comparaison de pommes et de charrettes à pommes.
Souvent, les gens pensent que le "jeton OAuth" implique toujours un jeton opaque - une séquence aléatoire de caractères alphanumériques qui ne contient aucune signification inhérente - qui est accordé par un dispensaire de jetons OAuth, qui ne peut ensuite être validé que par ce même système de dispensaires OAuth. Mais ce n'est pas le seul type de jeton OAuth. Un jeton opaque est une sorte de jeton; JWT peut être utilisé comme un autre type de jeton OAuth.
Les JWT, en revanche, ne sont pas opaques. Le JWT n'est pas un "pointeur" ou une référence à l'information. Il contient en fait de nombreuses informations spécifiques, qui peuvent être extraites et interprétées par toute partie disposant du jeton. Étant donné que le JWT contient des informations réelles, un JWT peut être volumineux; 300 octets, 500 octets ou plus, selon les revendications qu'il contient et l'algorithme utilisé pour le signer. Lorsque les gens disent que «les JWT s'auto-valident», ce qu'ils veulent dire, tout détenteur du JWT peut l'ouvrir, le valider, puis prendre des décisions d'autorisation en fonction des revendications qui y sont présentées. Valider le JWT signifie: vérifier sa structure, décoder l'encodage base64, vérifier que la clé est correcte, vérifier la signature, puis vérifier que les revendications requises sont présentes dans le jeton, vérifier l'expiration. Ce n'est pas une chose simple, plutôt un processus en plusieurs étapes, mais bien sûr, il y a beaucoup de bibliothèques dans divers langages de programmation qui gèrent cela, et bien sûr il y a la politique VerifyJWT qui vous aide à le faire dans un proxy API Apigee Edge. Le fait est que tout détenteur ou récepteur peut vérifier un jeton. Pour cette raison, nous disons que JWT prend en charge la "Fédération" - n'importe qui peut générer un jeton, et n'importe qui peut lire et valider un jeton.
revendications personnalisées. Les jetons JWT et OAuth opaques peuvent porter des revendications personnalisées sur le sujet. Sécurité. Les deux sont des jetons au porteur. Les deux doivent être protégés en tant que secrets. expiration. Les deux peuvent être marqués d'une expiration. Les deux peuvent être rafraîchis. Le mécanisme ou l'expérience d'authentification. Les deux peuvent présenter la même expérience utilisateur.
la source
Jwt est un ensemble strict d'instructions pour l'émission et la validation de jetons d'accès signés. Les jetons contiennent des revendications qui sont utilisées par une application pour limiter l'accès à un utilisateur
D'un autre côté, OAuth2 n'est pas un protocole, c'est un cadre d'autorisation délégué. pensez à des directives très détaillées, pour permettre aux utilisateurs et aux applications d'autoriser des autorisations spécifiques à d'autres applications dans les paramètres privés et publics. OpenID Connect qui se trouve au-dessus de OAUTH2 vous donne l'authentification et l'autorisation.
la source