1105 votes

Quelle est la différence entre OpenID et OAuth ?

Je m'efforce vraiment de comprendre la différence entre OpenID et OAuth? Peut-être sont-ils deux choses totalement distinctes?

5 votes

Cela peut être utile pour comprendre qu'OAuth n'est pas un cadre d'authentification - tandis que OpenID et OpenID Connect le sont. blog.api-security.org/2013/02/…

6 votes

OpenID Connect (2014) combine les fonctionnalités d'OpenID 2.0, OpenID Attribute Exchange 1.0 et OAuth 2.0 dans un seul protocole. security.stackexchange.com/questions/44611/…

4 votes

Voici une excellente explication de l'objectif de chaque norme : stackoverflow.com/a/33704657/557406

924voto

adrianbanks Points 36858

OpenID concerne l'authentification (c'est-à-dire prouver qui vous êtes), OAuth concerne l'autorisation (c'est-à-dire accorder l'accès à des fonctionnalités/données/etc.. sans avoir à traiter avec l'authentification d'origine).

OAuth pourrait être utilisé sur des sites partenaires externes pour permettre l'accès à des données protégées sans qu'ils aient à ré-authentifier un utilisateur.

L'article de blog "OpenID versus OAuth du point de vue de l'utilisateur" offre une comparaison simple des deux du point de vue de l'utilisateur et "OAuth-OpenID: Vous vous trompez si vous pensez qu'ils sont la même chose" donne plus d'informations à ce sujet.

6 votes

Viens juste de rassembler toutes les informations obtenues. J'espère que cette Comparaison OpenID & OAuth est utile.

234 votes

Ce n'est plus vraiment vrai. OAuth2 peut être utilisé pour l'authentification et l'autorisation. Les APIs Google utilisent OAuth 2.0 pour l'authentification et l'autorisation. Vous pouvez également choisir d'utiliser le système d'authentification de Google comme une manière d'externaliser l'authentification des utilisateurs pour votre application. Le seul inconvénient que je vois par rapport à OpenID est que vous devez l'implémenter pour chaque site. Cependant, d'un autre côté, il s'intègre correctement avec Android.

40 votes

"OpenID Connect" assure encore plus de confusion car il s'agit en fait d'un OAuth v2 avec une extension mineure.

406voto

Eran Hammer Points 2522

Il existe trois façons de comparer OAuth et OpenID :

1. Objectifs

OpenID a été créé pour l'authentification fédérée, c'est-à-dire permettre à un tiers d'authentifier vos utilisateurs pour vous, en utilisant des comptes qu'ils possèdent déjà. Le terme fédéré est crucial ici car tout l'intérêt d'OpenID est que n'importe quel fournisseur peut être utilisé (à l'exception des listes blanches). Vous n'avez pas besoin de pré-sélectionner ou de négocier un accord avec les fournisseurs pour permettre aux utilisateurs d'utiliser tout autre compte qu'ils possèdent.

OAuth a été créé pour éliminer le besoin pour les utilisateurs de partager leurs mots de passe avec des applications tierces. En fait, cela a commencé comme une solution à un problème OpenID : si vous prenez en charge OpenID sur votre site, vous ne pouvez pas utiliser les identifiants de base HTTP (nom d'utilisateur et mot de passe) pour fournir une API car les utilisateurs n'ont pas de mot de passe sur votre site.

Le problème de cette séparation d'OpenID pour l'authentification et d'OAuth pour l'autorisation est que les deux protocoles peuvent accomplir de nombreuses choses similaires. Ils fournissent chacun un ensemble de fonctionnalités différentes désirées par différentes implémentations mais essentiellement, ils sont assez interchangeables. Au fond, les deux protocoles sont une méthode de vérification des assertions (OpenID se limite à l'assertion "c'est qui je suis", tandis qu'OAuth fournit un "jeton d'accès" qui peut être échangé contre toute assertion prise en charge via une API).

2. Fonctionnalités

Les deux protocoles offrent un moyen à un site de rediriger un utilisateur quelque part ailleurs et de revenir avec une assertion vérifiable. OpenID fournit une assertion d'identité tandis qu'OAuth est plus générique sous forme d'un jeton d'accès qui peut ensuite être utilisé pour "poser des questions au fournisseur OAuth". Cependant, ils supportent chacun des fonctionnalités différentes :

OpenID - la fonction la plus importante d'OpenID est son processus de découverte. OpenID ne nécessite pas de coder en dur à l'avance les fournisseurs que vous souhaitez utiliser. En utilisant la découverte, l'utilisateur peut choisir n'importe quel fournisseur tiers qu'il souhaite pour l'authentification. Cette fonction de découverte a également causé la plupart des problèmes d'OpenID car elle est implémentée en utilisant des URI HTTP en tant qu'identifiants que la plupart des utilisateurs Web ne comprennent tout simplement pas. Parmi les autres fonctionnalités qu'OpenID propose, on trouve son support pour l'enregistrement client ad hoc en utilisant un échange DH, le mode immédiat pour une expérience utilisateur optimisée, et une façon de vérifier les assertions sans faire un autre aller-retour vers le fournisseur.

OAuth - la fonction la plus importante d'OAuth est le jeton d'accès qui fournit une méthode durable pour effectuer des requêtes supplémentaires. Contrairement à OpenID, OAuth ne se termine pas par une authentification mais fournit un jeton d'accès pour accéder à des ressources supplémentaires fournies par le même service tiers. Cependant, comme OAuth ne prend pas en charge la découverte, il nécessite de pré-sélectionner et de coder en dur les fournisseurs que vous décidez d'utiliser. Un utilisateur visitant votre site ne peut pas utiliser n'importe quel identifiant, seulement ceux pré-sélectionnés par vous. De plus, OAuth n'a pas de concept d'identité donc l'utiliser pour se connecter signifie soit ajouter un paramètre personnalisé (comme Twitter le fait) soit faire un autre appel API pour obtenir l'utilisateur actuellement "connecté".

3. Implémentations techniques

Les deux protocoles partagent une architecture commune en utilisant la redirection pour obtenir l'autorisation de l'utilisateur. Dans OAuth, l'utilisateur autorise l'accès à ses ressources protégées et dans OpenID, à son identité. Mais c'est tout ce qu'ils partagent.

Chaque protocole a une manière différente de calculer une signature utilisée pour vérifier l'authenticité de la demande ou de la réponse, et chacun a des exigences d'enregistrement différentes.

8 votes

Merci, j'avais beaucoup de mal avec les mots "Fédéré" et "découverte" dans ce contexte et la réponse les éclaire parfaitement.

4 votes

Une bonne réponse, mais je suis légèrement confus avec "L'exception des listes blanches". Faites-vous des exceptions sur la liste blanche ?

3 votes

OAuth ne se limite pas à l'authentification mais fournit un jeton d'accès pour accéder à des ressources supplémentaires fournies par le même service tiers. Pas exactement. De rfc6749 : Le serveur d'autorisation peut être le même serveur que le serveur de ressources ou une entité distincte. Un seul serveur d'autorisation peut émettre des jetons d'accès acceptés par plusieurs serveurs de ressources.

121voto

Chris Boyle Points 6194

OpenID est (principalement) pour l'identification/l'authentification, donc que stackoverflow.com sait que je possède chris.boyle.name (ou ailleurs) et donc que je suis probablement la même personne qui possédait chris.boyle.name hier et qui a gagné quelques points de réputation.

OAuth est conçu pour l'autorisation d'effectuer des actions en votre nom, donc que stackoverflow.com (ou ailleurs) peut demander la permission, par exemple, de tweeter automatiquement en votre nom, sans connaître votre mot de passe Twitter.

29 votes

Mais si vous avez autorisé Twitter à agir en votre nom, cela implique que vous êtes la personne que vous prétendez être - donc cela combine les deux?

4 votes

David, tu as raison. Google le fait de cette manière.

3 votes

Il semble qu'avec oauth, le site tiers obtiendrait un jeton qu'il pourrait utiliser pour effectuer des actions sur le site du fournisseur oauth (par exemple, tweeter en votre nom), mais obtenir l'identité de l'utilisateur (nom d'utilisateur) n'est pas intégré au protocole, donc les fournisseurs doivent ajouter cela en tant que ressource personnalisée.

115voto

Slartibartfast Points 5141

De nombreuses personnes visitent encore ceci, voici donc un diagramme très simple pour l'expliquer

OpenID_vs._pseudo-authentication_using_OAuth

Crédit Wikipedia

17 votes

Ne devrait-il pas y avoir une étape supplémentaire dans l'exemple OAuth où l'application Android utilise la clé de valet pour communiquer avec Google afin de trouver l'identité des utilisateurs?

0 votes

Je pense que l'étape manquante devrait être plus générique. C'est-à-dire qu'il ne s'agit pas tant d'identité que des données qui peuvent être fournies via une API. Par exemple, vos photos Google ou vos e-mails G-Mail que l'application Android pourrait utiliser à diverses fins. Bien sûr, l'identité pourrait être accessible via une API.

5 votes

Pour OAuth, devrait-il être "Donne-moi la clé du valet de ta maison pour que je puisse accéder / modifier (selon les autorisations) ta maison"?

46voto

null Points 3159

OAuth

Utilisé uniquement pour l'autorisation déléguée -- ce qui signifie que vous autorisez un service tiers à accéder à vos données personnelles, sans divulguer de mot de passe. De plus, les "sessions" OAuth ont généralement une durée de vie plus longue que les sessions utilisateur. Cela signifie qu'OAuth est conçu pour permettre l'autorisation.

Par exemple, Flickr utilise OAuth pour permettre à des services tiers de publier et modifier une photo pour le compte d'une personne, sans qu'elle ait à divulguer son nom d'utilisateur et son mot de passe Flickr.

OpenID

Utilisé pour authentifier l'identité à authentification unique. Tout ce que OpenID est censé faire est de permettre à un fournisseur OpenID de prouver qui vous êtes. Cependant, de nombreux sites utilisent l'authentification d'identité pour autoriser l'accès (bien que les deux puissent être séparés)

Par exemple, on montre son passeport à l'aéroport pour authentifier (ou prouver) que la personne dont le nom est sur le billet qu'elle utilise est bien elle.

9 votes

Vous pourriez certainement utiliser OAuth pour l'authentification unique ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X