Je suis très confus avec le jargon difficile disponible sur le Web à propos de OAUTH, OpenID et OPENID Connect. Quelqu'un peut-il me dire la différence avec des mots simples.
Je suis très confus avec le jargon difficile disponible sur le Web à propos de OAUTH, OpenID et OPENID Connect. Quelqu'un peut-il me dire la différence avec des mots simples.
OpenID est un protocole pour l ' authentification tandis que OAuth est pour l' autorisation . L'authentification consiste à s'assurer que le type à qui vous parlez est bien celui qu'il prétend être. L'autorisation consiste à décider ce que ce type doit être autorisé à faire.
Dans OpenID, l'authentification est déléguée: le serveur A veut authentifier l'utilisateur U, mais les informations d'identification de U (par exemple le nom et le mot de passe de U) sont envoyées à un autre serveur , B, que A fait confiance (au moins, fait confiance pour authentifier les utilisateurs). En effet, le serveur B s'assure que U est bien U, puis dit à A: "ok, c'est le véritable U".
En OAuth, l'autorisation est déléguée: l'entité A obtient de l'entité B un "accès droit "que A peut montrer au serveur S pour obtenir l'accès; B peut ainsi délivrer des clés d'accès temporaires et spécifiques à A sans leur donner trop de puissance. Vous pouvez imaginer un serveur OAuth en tant que maître clé dans un grand hôtel; il donne aux employés les clés qui ouvrent les portes des chambres dans lesquelles ils sont censés entrer, mais chaque clé est limitée (elle ne donne pas accès à toutes les chambres); de plus, les clés s'autodétruisent au bout de quelques heures.
Dans une certaine mesure, l'autorisation peut être abusée en une pseudo-authentification, sur la base que si l'entité A obtient de B une clé d'accès via OAuth, et le montre au serveur S, puis le serveur S peut déduire que B a authentifié A avant d'accorder la clé d'accès. Ainsi, certaines personnes utilisent OAuth là où elles devraient utiliser OpenID. Ce schéma peut être instructif ou non; mais je pense que cette pseudo-authentification est plus déroutante que tout. OpenID Connect fait exactement cela: il abuse OAuth dans un protocole d'authentification. Dans l'analogie de l'hôtel: si je rencontre un prétendu employé et que cette personne me montre qu'il a une clé qui ouvre ma chambre, alors je suppose qu'il s'agit d'un véritable employé, sur la base que le maître des clés ne lui aurait pas donné une clé qui ouvre ma chambre s'il ne l'était pas.
Les trois permettent à une personne de donner son nom d'utilisateur / mot de passe (ou autres informations d'identification) à une autorité de confiance plutôt qu'à une application moins fiable.
Pour comprendre quelque chose, regardez son histoire.
OpenID & OAuth s'est développé sur des pistes parallèles et a fusionné en 2014 dans OpenID Connect. Tout au long de leur histoire, OpenID et OAuth ont laissé une application utiliser une autorité de confiance pour gérer les informations d'identification des utilisateurs privés. Alors qu'OpenID permet à l'autorité de vérifier l'identité d'un utilisateur, OAuth permet à l'autorité d'accorder un accès limité aux éléments d'un utilisateur.
OpenID 1.0 (2006) permet à une application de demander à une autorité la preuve qu'un utilisateur final possède une identité (une URL).
OpenID 2.0 (2007) fait de même, mais ajoute un deuxième format d'identité (XRI) et ajoute de la flexibilité à la manière dont l'utilisateur final spécifie l'identité et l'autorité.
OpenID Attribute Exchange 1.0 (2007) étend OpenID 2.0 en permettant à une application d'extraire & les informations de profil de l'utilisateur final avec l'autorité - en plus de vérifier l'identité de l'utilisateur final.
OAuth 1.0 (2010) permet à un utilisateur final d'accorder à une application un accès limité aux ressources d'un serveur tiers appartenant à une autorité.
OAuth 2.0 (2012) fait la même chose que OAuth 1.0 mais avec un tout nouveau protocole.
OpenID Connect (2014) combine les fonctionnalités d'OpenID 2.0, d'OpenID Attribute Exchange 1.0 et d'OAuth 2.0 dans un seul protocole. Il permet à une application d'utiliser une autorité ...
Beaucoup de gens visitent encore ceci, alors voici un diagramme très simple pour l'expliquer
Nous avons déjà un diagramme et beaucoup de bonnes données, voici donc un exemple au cas où cela pourrait aider.
Disons que je veux publier un commentaire sur StackOverflow. StackOverflow n'autorise les commentaires que si un utilisateur a 50 points de réputation.
StackOverflow doit autoriser cette demande (par exemple, ne l'autoriser que si l'utilisateur a> = 50 rep). StackOverflow n'utiliserait pas OAuth pour ce faire car StackOverflow possède la ressource protégée. Si StackOverflow essayait de publier un commentaire sur Facebook au nom de l'utilisateur, il utiliserait OAuth. Au lieu de cela, StackOverflow utilisera l'autorisation locale (par exemple if (user.reputation < 50) throw InsufficientReputationError ();
)
Pour ce faire, StackOverflow doit d'abord savoir qui fait le demande. En d'autres termes, pour autoriser la demande, il doit d'abord authentifier la demande.
StackOverflow vérifie d'abord la session et les en-têtes HTTP pour voir si l'utilisateur peut être rapidement authentifié ( par exemple, ce n'est pas leur première requête) mais cela échoue.
Imaginons que StackOverflow ait décidé d'utiliser OpenID Connect. Cela signifie que StackOverflow approuve un fournisseur d'identité. Il s'agit d'un service approuvé par StackOverflow, qui peut indiquer à StackOverflow qui est l'utilisateur actuel. Dans cet exemple, nous supposerons qu'il s'agit de Google.
StackOverflow demande maintenant à Google qui est l'utilisateur actuel. Cependant, Google doit d'abord s'assurer que StackOverflow est autorisé à savoir qui est l'utilisateur actuel. En d'autres termes, Google doit autoriser StackOverflow. Puisque Google est le propriétaire de la ressource protégée et StackOverflow est celui qui y accède, nous pouvons utiliser OAuth ici. En fait, OpenID Connect l'exige.
Cela signifie que StackOverflow doit s'authentifier auprès d'un serveur d'autorisation en qui Google fait confiance (en réalité, ce serait également Google, mais ce n'est pas forcément le cas) et obtenir un jeton d'accès . Il prend ce jeton d'accès à Google et demande l'identité de l'utilisateur. Google renvoie ensuite l'identité de l'utilisateur (en signant l'identité en cours de route) et StackOverflow autorise ensuite la demande maintenant qu'il connaît l'identité de l'utilisateur.
Au cas où vous l'auriez manqué, il y avait plusieurs étapes d'authentification et d'autorisation chacune.
Il s'agissait d'un protocole antérieur qui permettait à un fournisseur d'identité (comme Google) de transmettre des informations utilisateur à un service (comme StackOverflow). Cependant, il a utilisé une autre méthode (pas OAuth) pour que Google autorise StackOverflow à accéder à l'identité de l'utilisateur. OpenID avait quelques failles de sécurité (qui, je crois, ont été corrigées) mais à mon avis, le vrai tueur était simplement le fait qu'OAuth avait un meilleur support et avait donc tendance à être moins de travail que l'apprentissage du protocole personnalisé d'OpenID.
Depuis aujourd'hui, tout le monde l'abandonne. Ne l'utilisez pas. Utilisez OpenID Connect.
Dans le scénario que j'ai décrit ci-dessus, OAuth est utilisé exactement comme prévu pour l'autorisation. Cependant, il existe un autre flux de travail qui peut souvent dérouter les gens. Cela est dû au fait que dans de nombreuses situations (la plupart?), Le serveur fournissant l'identité de l'utilisateur et le serveur d'autorisation OAuth sont le même serveur.
Dans ce cas, il semble un peu excessif qu'une requête HTTP soit d'abord adressée au serveur d'autorisation pour obtenir un jeton d'accès, puis à nouveau sur le même serveur pour obtenir un jeton d'identité. Ainsi, une extension a été créée pour la spécification OAuth afin de permettre au serveur d'autorisation de regrouper les informations d'identité de l'utilisateur avec le jeton d'accès.
Cela permet à l'authentification de se produire entièrement dans le navigateur (par exemple, StackOverflow's les serveurs n'ont pas besoin d'être impliqués). Cependant, ce type d'authentification est moins utile et (je pense?) Est moins couramment utilisé.
En plus des autres réponses: je pense que beaucoup de confusion vient de l’utilisation inexacte, ou du moins inhabituelle des termes Authentification et Autorisation
OpenID Connect 1.0 est commercialisé comme une solution d ' Authentification , alors qu'il ne gère pas à lui seul l'authentification. L'authentification "réelle" dans son sens de base (processus de validation des informations d'identification de l'utilisateur pour prouver une identité ) est hors de portée d'OpenID Connect.
OpenID Connect devrait être mieux commercialisé comme un protocole de Fédération , permettant à une partie de confiance d'utiliser le processus d'authentification existant, la base de données utilisateur et la gestion de session d'un fournisseur d'ID tiers. C'est fonctionnellement similaire à SAML 2.0.
Remarque: à proprement parler, du point de vue de la partie utilisatrice, l'obtention et la validation d'un jeton d'identification auprès d'un fournisseur d'identité peuvent être considérées comme une méthode d'authentification. Je crois que c'est de là que vient «OpenID Connect est un protocole d'authentification».
Même raisonnement pour OAuth 2.0 étant un protocole d ' autorisation : généralement l'autorisation est le processus de définition une stratégie d'accès qui détermine quels utilisateurs ont accès à quelles ressources. Cette définition ne s'applique guère à OAuth.
OAuth 2.0 permet en fait aux utilisateurs d'autoriser une application / client à accéder à leurs propres ressources en leur nom. En d'autres termes, OAuth 2.0 autorise les applications clients , et non les utilisateurs, à accéder aux ressources. La politique d'autorisation (accordant aux utilisateurs l'accès aux ressources) est censée exister avant le déploiement d'OAuth.
J'aurais qualifié OAuth de protocole de délégation d'accès .
Je m'excuse si ce message soulève encore plus la confusion :)
Comme déjà mentionné, Oauth est une chose, OpenID en est une autre et OpenID Connect combine les deux.
Mais, comme déjà mentionné, l'utilisation de l ' authentification et de l' autorisation pour différencier Oauth et OpenID est tout simplement erronée. L'authentification, la confirmation de la véracité de la revendication d'une entité sur une identité stockée, est attribuée à OpenID mais elle fait définitivement partie du processus Oauth. L'autorisation, l'autorisation d'accéder à une ressource ou un conteneur spécifique, est attribuée à Oauth mais elle fait définitivement partie du processus OpenID.
D'après mon expérience, la vraie différence entre Oauth et OpenID peut être vue dans le non typique -activités liées à l'authentification exécutées et par qui, dans le cadre de chaque programme
OpenID Connect permet alors un utilisateur pour accéder à une adresse Web et une fois dedans, donne à l'application Web sous-jacente un moyen de récupérer des ressources supplémentaires hors site au nom de l'utilisateur.
Pour résumer: OpenID Connect est une API d'identité fédérée qui comprend un profil et une extension d'OAuth 2.0 qui permet à un client (c'est-à-dire une application mobile ou un site Web) de rediriger une personne vers un fournisseur d'identité central pour l'authentification, et permet à cette personne de autoriser la divulgation d'informations à ce client.
Vous devriez lire mon blog OAuth vs SAML vs OpenID Connect : https://gluu.co/oauth- saml-openid
L'API OpenID Connect comprend un certain nombre de points de terminaison, qui ne sont pas tous liés à OAuth:
Points de terminaison OAuth
.well-known / openid-configuration
, y compris l'emplacement des points de terminaison, algorithmes cryptographiques pris en charge, et d'autres informations dont le client a besoin pour interagir avec l'OP. (RFC 8414) Points de terminaison non OAuth