comprendre Quelle est la différence entre OpenID et OAuth?




openid vs oauth2 (12)

J'essaie vraiment de comprendre la différence entre OpenID et OAuth? Peut-être qu'ils sont deux choses totalement séparées?


OAuth

Utilisé uniquement pour l' authorization déléguée, ce qui signifie que vous autorisez un accès à un service tiers à utiliser des données personnelles, sans donner de mot de passe. En outre, les "sessions" OAuth vivent généralement plus longtemps que les sessions utilisateur. Ce qui signifie qu'OAuth est conçu pour autoriser l'autorisation

c'est-à-dire que Flickr utilise OAuth pour permettre à des services tiers d'afficher et de modifier une image de personne en leur nom, sans qu'ils aient à donner leur nom d'utilisateur et leur mot de passe.

OpenID

Utilisé pour authenticate identité de connexion unique. Tout ce que OpenID est supposé faire est de permettre à un fournisseur OpenID de prouver que vous le dites. Cependant, de nombreux sites utilisent l'authentification d'identité pour fournir une autorisation (mais les deux peuvent être séparés)

C'est-à-dire que l'on montre leur passeport à l'aéroport pour authentifier (ou prouver) le nom de la personne sur le ticket qu'ils utilisent.


OpenId prouve qui vous êtes

OAuth accorde l'accès à certaines fonctionnalités


OpenId utilise OAuth pour gérer l'authentification.

Par analogie, c'est comme si .NET reposait sur l'API Windows. Vous pouvez directement appeler l'API Windows, mais les arguments sont si larges, complexes et complexes, que vous pourriez facilement faire des erreurs / bugs / problèmes de sécurité.

Pareil avec OpenId / OAuth. OpenId s'appuie sur OAuth pour gérer l'authentification mais en définissant un Token (Id_token) spécifique, une signature numérique et des flux particuliers.


Je crois qu'il est logique de revoir cette question, comme l'ont également souligné les commentaires, l'introduction d'OpenID Connect peut avoir apporté plus de confusion.

OpenID Connect est un protocole d'authentification tel que OpenID 1.0 / 2.0, mais il est en fait construit au-dessus de OAuth 2.0, de sorte que vous obtiendrez des fonctionnalités d'autorisation avec des fonctionnalités d'authentification. La différence entre les deux est assez bien expliquée en détail dans cet article (relativement récent, mais important): http://oauth.net/articles/authentication/


OAuth construit l'authentification au-dessus de l'autorisation: l'utilisateur délègue l'accès à son identité à l'application, qui devient alors un consommateur de l'API d'identité, découvrant ainsi qui a autorisé le client en premier lieu http://oauth.net/articles/authentication/


Beaucoup de gens visitent encore ceci donc voici un diagramme très simple pour l'expliquer

Courtoisie Wikipedia


Je travaille actuellement sur OAuth 2.0 et OpenID connect spec. Donc, voici ma compréhension: Auparavant, ils étaient:

  1. OpenID était une implémentation propriétaire de Google permettant des applications tierces comme pour les sites Web de journaux, vous pouvez vous connecter en utilisant google et commenter un article et ainsi de suite sur d'autres cas d'utilisation. Donc, essentiellement, pas de partage de mot de passe pour le site Web du journal. Permettez-moi de mettre en place une définition ici, cette approche dans l'approche de l'entreprise est appelée Fédération. Dans Federation, vous disposez d'un serveur sur lequel vous authentifiez et autorisez (appelé IDP, Identity Provider) et généralement le détenteur des informations d'identification de l'utilisateur. l'application cliente où vous avez une entreprise s'appelle SP ou Service Provider. Si nous revenons à l'exemple du même site de presse, alors le site web du journal est SP ici et Google est IDP. En entreprise, ce problème a été résolu plus tôt en utilisant SAML. ce temps XML utilisé pour régner l'industrie du logiciel. Ainsi, des services Web à la configuration, tout était utilisé pour XML, nous avons donc SAML, un protocole de fédération complet.
  2. OAuth: OAuth a vu son émergence comme une norme regardant tous ces types d'approches propriétaires et donc nous avions OAuth 1.o en standard mais en ne traitant que de l'autorisation. Peu de gens ont remarqué, mais ça a commencé à ramasser. Ensuite, nous avons eu OAuth 2.0 en 2012. Les CTO, les architectes ont vraiment commencé à prêter attention à l'évolution du monde vers le cloud computing et avec les appareils informatiques évoluant vers les appareils mobiles et autres. OAuth est considéré comme résolvant un problème majeur où les clients du logiciel peuvent donner le service IDP à une entreprise et avoir de nombreux services de différents fournisseurs comme Salesforce, SAP, etc. Donc l'intégration ressemble vraiment à un gros problème, l'utilisation de SAML est coûteuse. alors explorons OAuth 2.o. Ohh, a manqué un point important que pendant ce temps, Google a senti qu'OAuth n'adressait pas réellement l'authentification, comment l'IDP donnera-t-il des données d'utilisateur au SP (qui est en fait merveilleusement adressé dans SAML) et avec d'autres extrémités comme:

    une. OAuth 2.o ne dit pas clairement, comment l'enregistrement des clients se produira b. il ne mentionne rien sur l'interaction entre SP (Resource Server) et l'application client (comme Analytics Server fournissant des données est Resource Server et l'application affichant ces données est Client)

Il y a déjà de merveilleuses réponses données ici techniquement, j'ai pensé à donner de donner une brève perspective d'évolution


OpenID et OAuth sont des protocoles basés sur HTTP pour l'authentification et / ou l'autorisation. Les deux sont destinés à permettre aux utilisateurs d'effectuer des actions sans donner d'informations d'authentification ou d'autorisations globales à des clients ou à des tiers. Bien qu'ils soient similaires et qu'il existe des normes proposées pour les utiliser tous les deux ensemble, ce sont des protocoles distincts.

OpenID est destiné à l'authentification fédérée. Un client accepte une assertion d'identité de la part de n'importe quel fournisseur (bien que les clients soient libres de la liste blanche ou des fournisseurs de listes noires).

OAuth est destiné à l'autorisation déléguée. Un client s'enregistre auprès d'un fournisseur, qui fournit des jetons d'autorisation qu'il acceptera pour effectuer des actions pour le compte de l'utilisateur.

OAuth est actuellement mieux adapté à l'autorisation, car d'autres interactions après l'authentification sont intégrées au protocole, mais les deux protocoles évoluent. OpenID et ses extensions peuvent être utilisés pour l'autorisation, et OAuth peut être utilisé pour l'authentification, ce qui peut être considéré comme une autorisation sans autorisation.


OpenID concerne l'authentification (c'est-à-dire la preuve de qui vous êtes), OAuth concerne l'autorisation (c'est-à-dire accorder l'accès à la fonctionnalité / data / etc .. sans avoir à traiter l'authentification originale).

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

Le blog " OpenID versus OAuth du point de vue de l'utilisateur " a une comparaison simple des deux du point de vue de l'utilisateur et " OAuth-OpenID: Vous abîmerez le mauvais arbre si vous pensez qu'ils sont la même chose " a plus d'informations à propos de ça.


Plus une extension à la question qu'une réponse, mais il peut ajouter une certaine perspective aux grandes réponses techniques ci-dessus. Je suis un programmeur expérimenté dans un certain nombre de domaines, mais un total de programmation pour le web. Nous essayons maintenant de construire une application Web en utilisant Zend Framework.

Définitivement implémentera une interface d'authentification de nom d'utilisateur / mot de passe de base spécifique à l'application, mais reconnaîtra que pour un nombre croissant d'utilisateurs, la pensée d'un autre nom d'utilisateur et mot de passe est dissuasive. Bien que n'étant pas exactement le réseautage social, je sais qu'un très grand pourcentage des utilisateurs potentiels de l'application ont déjà des comptes Facebook ou Twitter. L'application ne veut pas ou n'a pas vraiment besoin d'accéder aux informations sur le compte de l'utilisateur à partir de ces sites, elle veut simplement offrir la commodité de ne pas demander à l'utilisateur de configurer de nouvelles informations d'identification si elles ne le souhaitent pas. D'un point de vue fonctionnel, cela semblerait être un enfant d'affiche pour OpenID. Mais il semble que ni Facebook ni Twitter ne soient des fournisseurs OpenID en tant que tels, bien qu'ils prennent en charge l'authentification OAuth pour accéder aux données de leurs utilisateurs.

Dans tous les articles que j'ai lus sur les deux et comment ils diffèrent, ce ne fut pas jusqu'à ce que j'ai vu l'observation de Karl Anderson ci-dessus, que "OAuth peut être utilisé pour l'authentification, qui peut être considérée comme une autorisation sans autorisation" J'ai vu une confirmation explicite que OAuth était assez bon pour ce que je voulais faire.

En fait, quand je suis allé poster cette "réponse", n'étant pas membre à ce moment-là, j'ai regardé longuement au bas de cette page les options pour m'identifier. L'option d'utiliser une connexion OpenID ou d'en obtenir un si je n'en avais pas, mais rien sur twitter ou facebook, semblait suggérer que OAuth n'était pas adéquat pour le travail. Mais ensuite j'ai ouvert une autre fenêtre et cherché le processus d'inscription général pour - et voilà, il y a un tas d'options d'authentification tierces, y compris Facebook et Twitter. Finalement, j'ai décidé d'utiliser mon google id (qui est un OpenID) pour exactement la raison pour laquelle je ne voulais pas accorder l'accès à ma liste d'amis et tout ce que facebook aime partager sur ses utilisateurs - mais au moins c'est un preuve que OAuth est adéquate pour l'utilisation que j'avais en tête.

Ce serait génial si quelqu'un pouvait publier des informations ou des pointeurs sur la prise en charge de ce type de configuration d'autorisation en plusieurs parties, et comment vous traitez les utilisateurs qui révoquent l'autorisation ou perdent l'accès à leur site tiers. J'ai aussi l'impression que mon nom d'utilisateur ici identifie un compte unique auquel je pourrais accéder avec une authentification de base si je voulais le configurer, et accéder à ce même compte via d'autres authentificateurs tiers (par exemple pour que je sois considéré comme connecté dans si j'étais connecté à l'un de google, facebook ou twitter ...). Puisque ce site est en train de le faire, quelqu'un ici a probablement un bon aperçu du sujet. :-)

Désolé, c'était si long, et plus une question qu'une réponse - mais la remarque de Karl donnait l'impression que c'était l'endroit le plus approprié pour poster parmi le volume de discussions sur OAuth et OpenID. S'il y a un meilleur endroit pour cela que je n'ai pas trouvé, je m'excuse d'avance, j'ai essayé.


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

OAuth est conçu pour être autorisé à agir en votre nom, afin que .com (ou n'importe où) puisse demander la permission de, par exemple, tweeter en votre nom automatiquement, sans connaître votre mot de passe Twitter.


L'explication de la différence entre OpenID, OAuth, OpenID Connect:

OpenID est un protocole d'authentification tandis que OAuth est pour l'autorisation. L'authentification consiste à s'assurer que le gars avec qui vous parlez est effectivement celui qu'il prétend être. L'autorisation consiste à décider ce que ce type devrait ê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, qui approuve (au moins approuve les utilisateurs). En effet, le serveur B s'assure que U est bien U, puis dit à A: "ok, c'est le vrai U".

En OAuth, l'autorisation est déléguée: l'entité A obtient de l'entité B un «droit d'accès» que A peut montrer au serveur S pour se voir accorder un accès; B peut ainsi délivrer des clés d'accès temporaires spécifiques à A sans leur donner trop de puissance. Vous pouvez imaginer un serveur OAuth comme maître clé dans un grand hôtel; il donne aux employés des clés qui ouvrent les portes des pièces qu'ils sont censés entrer, mais chaque clé est limitée (elle ne donne pas accès à toutes les pièces); de plus, les clés s'auto-détruisent après quelques heures.

Dans une certaine mesure, l'autorisation peut être abusée dans une pseudo-authentification, car si l'entité A obtient de B une clé d'accès via OAuth et la montre au serveur S, alors le serveur S peut déduire que B a authentifié A avant d'accorder l'accès. clé. Donc, certaines personnes utilisent OAuth où ils devraient utiliser OpenID. Ce schéma peut ou peut ne pas être éclairant; mais je pense que cette pseudo-authentification est plus déroutante que tout. OpenID Connect fait exactement cela: il abuse d'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 que c'est un vrai employé, sur la base que le maître clé ne lui aurait pas donné une clé ce qui ouvre ma chambre s'il ne l'était pas.

(source)

En quoi OpenID Connect est-il différent d'OpenID 2.0?

OpenID Connect effectue de nombreuses tâches identiques à celles d'OpenID 2.0, mais le fait d'une manière qui soit conviviale pour les API et utilisable par les applications natives et mobiles. OpenID Connect définit des mécanismes optionnels pour une signature et un chiffrement robustes. Alors que l'intégration de OAuth 1.0a et OpenID 2.0 nécessitait une extension, dans OpenID Connect, les capacités OAuth 2.0 sont intégrées au protocole lui-même.

(source)

OpenID connect vous donnera un jeton d'accès plus un jeton d'identité. Le jeton d'identification est un JWT et contient des informations sur l'utilisateur authentifié. Il est signé par le fournisseur d'identité et peut être lu et vérifié sans accéder au fournisseur d'identité.

En outre, OpenID connect standardise un certain nombre de choses qu'oauth2 laisse au choix. par exemple, les étendues, la découverte de point de terminaison et l'enregistrement dynamique des clients.

Cela facilite l'écriture de code permettant à l'utilisateur de choisir entre plusieurs fournisseurs d'identité.

(source)

OAuth 2.0 de Google

Les API OAuth 2.0 de Google peuvent être utilisées à la fois pour l'authentification et l'autorisation. Ce document décrit notre implémentation OAuth 2.0 pour l'authentification, qui est conforme à la spécification OpenID Connect et certifiée OpenID. La documentation trouvée dans Utilisation d'OAuth 2.0 pour accéder aux API Google s'applique également à ce service. Si vous souhaitez explorer ce protocole de manière interactive, nous vous recommandons Google OAuth 2.0 Playground .

(source)