Ich versuche wirklich, den Unterschied zwischen OpenID und OAuth zu verstehen. Vielleicht sind es zwei völlig getrennte Dinge?
authentication
oauth
openid
Micah
quelle
quelle
Antworten:
Bei OpenID geht es um die Authentifizierung (dh um zu beweisen, wer Sie sind), bei OAuth um die Autorisierung (dh um den Zugriff auf Funktionen / Daten / usw. zu gewähren, ohne sich um die ursprüngliche Authentifizierung kümmern zu müssen).
OAuth kann auf externen Partnerwebsites verwendet werden, um den Zugriff auf geschützte Daten zu ermöglichen, ohne dass ein Benutzer erneut authentifiziert werden muss.
Der Blog-Beitrag " OpenID versus OAuth aus der Sicht des Benutzers " bietet einen einfachen Vergleich der beiden aus Sicht des Benutzers und " OAuth-OpenID: Sie bellen den falschen Baum an, wenn Sie glauben, dass sie dasselbe sind " enthält weitere Informationen darüber.
quelle
Es gibt drei Möglichkeiten, OAuth und OpenID zu vergleichen:
1. Zwecke
OpenID wurde für die Verbundauthentifizierung erstellt, dh, ein Drittanbieter kann Ihre Benutzer für Sie authentifizieren, indem er bereits vorhandene Konten verwendet . Der Begriff Verbund ist hier von entscheidender Bedeutung, da der springende Punkt von OpenID darin besteht, dass jeder Anbieter verwendet werden kann (mit Ausnahme von Whitelists). Sie müssen keinen Vertrag mit den Anbietern vorab auswählen oder aushandeln, damit Benutzer ein anderes Konto verwenden können, über das sie verfügen.
OAuth wurde erstellt, um zu vermeiden, dass Benutzer ihre Kennwörter für Anwendungen von Drittanbietern freigeben müssen . Es begann als ein Weg, um ein OpenID-Problem zu lösen: Wenn Sie OpenID auf Ihrer Site unterstützen, können Sie keine HTTP Basic-Anmeldeinformationen (Benutzername und Passwort) verwenden, um eine API bereitzustellen, da die Benutzer kein Passwort auf Ihrer Site haben.
Das Problem bei dieser Trennung von OpenID zur Authentifizierung und OAuth zur Autorisierung besteht darin, dass beide Protokolle viele der gleichen Aufgaben ausführen können. Sie bieten jeweils unterschiedliche Funktionen, die von unterschiedlichen Implementierungen gewünscht werden, sind jedoch im Wesentlichen ziemlich austauschbar. Im Kern handelt es sich bei beiden Protokollen um eine Assertionsüberprüfungsmethode (OpenID ist auf die Assertion "Dies ist, wer ich bin" beschränkt, während OAuth ein "Zugriffstoken" bereitstellt, das über eine API gegen jede unterstützte Assertion ausgetauscht werden kann).
2. Funktionen
Beide Protokolle bieten einer Site die Möglichkeit, einen Benutzer an einen anderen Ort umzuleiten und eine überprüfbare Aussage zu treffen. OpenID bietet eine Identitätszusicherung, während OAuth allgemeiner in Form eines Zugriffstokens ist, das dann verwendet werden kann, um "dem OAuth-Anbieter Fragen zu stellen" . Sie unterstützen jedoch jeweils unterschiedliche Funktionen:
OpenID - Das wichtigste Merkmal von OpenID ist der Erkennungsprozess. OpenID erfordert keine feste Codierung aller Anbieter, die Sie im Voraus verwenden möchten. Mithilfe der Erkennung kann der Benutzer einen beliebigen Drittanbieter auswählen, den er authentifizieren möchte. Diese Erkennungsfunktion hat auch die meisten Probleme von OpenID verursacht, da die Implementierung durch die Verwendung von HTTP-URIs als Bezeichner erfolgt, die die meisten Webbenutzer einfach nicht erhalten. Weitere Funktionen von OpenID sind die Unterstützung der Ad-hoc-Client-Registrierung mithilfe eines DH-Austauschs, der Sofortmodus für eine optimierte Endbenutzererfahrung und die Möglichkeit, Behauptungen zu überprüfen, ohne einen weiteren Roundtrip zum Anbieter zu unternehmen.
OAuth - Das wichtigste Merkmal von OAuth ist das Zugriffstoken, das eine dauerhafte Methode für zusätzliche Anforderungen bietet. Im Gegensatz zu OpenID endet OAuth nicht mit der Authentifizierung, sondern stellt ein Zugriffstoken bereit, um Zugriff auf zusätzliche Ressourcen zu erhalten, die vom selben Drittanbieter-Service bereitgestellt werden. Da OAuth die Erkennung jedoch nicht unterstützt, müssen die Anbieter, für die Sie sich entscheiden, vorab ausgewählt und fest codiert werden. Ein Benutzer, der Ihre Website besucht, kann keine Kennung verwenden, sondern nur die von Ihnen vorgewählten. Außerdem hat OAuth kein Identitätskonzept. Wenn Sie es für die Anmeldung verwenden, müssen Sie entweder einen benutzerdefinierten Parameter hinzufügen (wie von Twitter ausgeführt) oder einen weiteren API-Aufruf ausführen, um den aktuell "angemeldeten" Benutzer zu erhalten.
3. Technische Implementierungen
Die beiden Protokolle haben eine gemeinsame Architektur bei der Verwendung der Umleitung, um eine Benutzerautorisierung zu erhalten. In OAuth autorisiert der Benutzer den Zugriff auf seine geschützten Ressourcen und in OpenID auf seine Identität. Aber das ist alles, was sie teilen.
Jedes Protokoll hat eine andere Methode zur Berechnung einer Signatur, mit der die Authentizität der Anforderung oder Antwort überprüft wird, und jedes hat unterschiedliche Registrierungsanforderungen.
quelle
OpenID dient (hauptsächlich) zur Identifizierung / Authentifizierung, sodass
stackoverflow.com
ich weißchris.boyle.name
(oder wo auch immer), dass ich wahrscheinlich dieselbe Person bin, diechris.boyle.name
gestern Eigentümer war und einige Reputationspunkte verdient hat.OAuth ist für die Autorisierung konzipiert, um in Ihrem Namen Maßnahmen zu ergreifen, sodass
stackoverflow.com
(oder wo auch immer) Sie um Erlaubnis bitten können, beispielsweise automatisch in Ihrem Namen zu twittern, ohne Ihr Twitter-Passwort zu kennen.quelle
Viele Leute besuchen dies immer noch, deshalb hier ein sehr einfaches Diagramm, um es zu erklären
Mit freundlicher Genehmigung von Wikipedia
quelle
OAuth
Wird nur für delegierte
authorization
Benutzer verwendet. Dies bedeutet, dass Sie einem Drittanbieter den Zugriff auf die Verwendung personenbezogener Daten ohne Angabe eines Kennworts autorisieren. Auch OAuth "Sitzungen" leben im Allgemeinen länger als Benutzersitzungen. Dies bedeutet, dass OAuth so konzipiert ist, dass eine Autorisierung möglich istDas heißt, Flickr verwendet OAuth, um es Drittanbietern zu ermöglichen, ein Personenbild in ihrem Namen zu veröffentlichen und zu bearbeiten, ohne dass sie ihren Flimmernden-Benutzernamen und ihr Passwort eingeben müssen.
OpenID
Wird zur
authenticate
einmaligen Anmeldung verwendet. Alles, was OpenID tun soll, ist einem OpenID-Anbieter zu erlauben, zu beweisen, dass Sie sagen, dass Sie es sind. Viele Sites verwenden jedoch die Identitätsauthentifizierung, um die Autorisierung bereitzustellen (die beiden können jedoch getrennt werden).dh man zeigt seinen Reisepass am Flughafen, um den Namen der Person zu authentifizieren (oder zu beweisen), deren Name auf dem von ihnen verwendeten Ticket steht.
quelle
Verwenden Sie OAuth, wenn sich Ihre Benutzer möglicherweise nur mit Facebook oder Twitter anmelden möchten. Verwenden Sie OpenID, wenn Ihre Benutzer Nackenbärte sind, die ihre eigenen OpenID-Anbieter betreiben, weil sie "nicht möchten, dass jemand anderes ihre Identität besitzt".
quelle
OpenID hat die Form eines eindeutigen URI , der von einem "OpenID-Anbieter", dh einem Identitätsanbieter (idP), verwaltet wird.
OAuth kann in Verbindung mit XACML verwendet werden, wobei OAuth für die Eigentumsgenehmigung und die Zugriffsdelegierung verwendet wird, während XACML zum Definieren der Autorisierungsrichtlinien verwendet wird.
OIDC verwendet einfache JSON-Web-Tokens (JWT), die Sie mithilfe von Flows erhalten können, die den OAuth 2.0- Spezifikationen entsprechen. OAuth steht in direktem Zusammenhang mit OIDC, da OIDC eine Authentifizierungsschicht ist, die auf OAuth 2.0 aufbaut .
Zum Beispiel , wenn Sie entschied sich anmelden Auth0 mit Ihrem Google - Konto dann verwendet , um Sie OIDC . Sobald Sie sich erfolgreich bei Google authentifiziert und Auth0 zum Zugriff auf Ihre Informationen autorisiert haben, sendet Google Informationen über den Benutzer und die durchgeführte Authentifizierung an Auth0 zurück . Diese Informationen werden in einem JSON Web Token (JWT) zurückgegeben. Sie erhalten ein Zugriffstoken und auf Anfrage ein ID-Token. Arten von Token : Quelle: OpenID Connect
Analogie :
Eine Organisation verwendet einen Ausweis zur Identifizierung und enthält Chips. Sie speichert Details zum Mitarbeiter zusammen mit der Autorisierung, dh Campus / Gate / ODC-Zugriff. ID- Karte fungiert als OIDC und Chip als OAuth . Weitere Beispiele und Formular- Wiki
quelle
OpenID und OAuth sind jeweils HTTP-basierte Protokolle zur Authentifizierung und / oder Autorisierung. Beide sollen es Benutzern ermöglichen, Aktionen auszuführen, ohne Clients oder Dritten Authentifizierungsdaten oder pauschale Berechtigungen zu erteilen. Obwohl sie ähnlich sind und Standards vorgeschlagen werden, um beide zusammen zu verwenden, handelt es sich um separate Protokolle.
OpenID ist für die Verbundauthentifizierung vorgesehen. Ein Kunde akzeptiert eine Identitätszusicherung von jedem Anbieter (obwohl es den Kunden frei steht, Anbieter auf die Whitelist oder Blacklist zu setzen).
OAuth ist für die delegierte Autorisierung vorgesehen. Ein Client registriert sich bei einem Anbieter, der Autorisierungstoken bereitstellt, die er akzeptiert, um Aktionen im Namen des Benutzers auszuführen.
OAuth ist derzeit besser für die Autorisierung geeignet, da weitere Interaktionen nach der Authentifizierung in das Protokoll integriert sind, sich jedoch beide Protokolle weiterentwickeln. OpenID und seine Erweiterungen können für die Autorisierung verwendet werden, und OAuth kann für die Authentifizierung verwendet werden, was als No-Op-Autorisierung angesehen werden kann.
quelle
Ich halte es für sinnvoll, diese Frage erneut zu prüfen, wie auch in den Kommentaren ausgeführt. Die Einführung von OpenID Connect hat möglicherweise mehr Verwirrung gestiftet.
OpenID Connect ist ein Authentifizierungsprotokoll wie OpenID 1.0 / 2.0, das jedoch auf OAuth 2.0 aufbaut, sodass Sie neben den Authentifizierungsfunktionen auch Autorisierungsfunktionen erhalten. Der Unterschied zwischen den beiden wird in diesem (relativ neuen, aber wichtigen) Artikel ziemlich ausführlich erklärt: http://oauth.net/articles/authentication/
quelle
Die Erklärung des Unterschieds zwischen OpenID, OAuth und OpenID Connect:
(Quelle)
(Quelle)
(Quelle)
Googles OAuth 2.0
(Quelle)
quelle
Eher eine Erweiterung der Frage als eine Antwort, aber es kann den oben genannten großartigen technischen Antworten eine gewisse Perspektive verleihen. Ich bin ein erfahrener Programmierer in einer Reihe von Bereichen, aber ein absoluter Neuling im Programmieren für das Web. Versuchen Sie nun, eine webbasierte Anwendung mit Zend Framework zu erstellen.
Auf jeden Fall wird eine anwendungsspezifische grundlegende Schnittstelle zur Authentifizierung von Benutzernamen und Kennwort implementiert. Beachten Sie jedoch, dass für eine wachsende Anzahl von Benutzern der Gedanke an einen weiteren Benutzernamen und ein anderes Kennwort abschreckend wirkt. Obwohl es sich nicht gerade um soziale Netzwerke handelt, weiß ich, dass ein sehr großer Prozentsatz der potenziellen Benutzer der Anwendung bereits über Facebook- oder Twitter-Konten verfügt. Die Anwendung möchte oder muss nicht wirklich von diesen Websites aus auf Informationen über das Benutzerkonto zugreifen. Sie möchte lediglich den Komfort bieten, dass der Benutzer keine neuen Kontoanmeldeinformationen einrichten muss, wenn er dies nicht möchte. Aus funktionaler Sicht scheint dies ein Aushängeschild für OpenID zu sein. Es scheint jedoch, dass weder Facebook noch Twitter OpenID-Anbieter als solche sind, obwohl sie die OAuth-Authentifizierung unterstützen, um auf die Daten ihrer Benutzer zuzugreifen.
In all den Artikeln, die ich über die beiden gelesen habe und wie sie sich unterscheiden, wird es nicht dauern, bis ich Karl Andersons Beobachtung oben gesehen habe, dass "OAuth zur Authentifizierung verwendet werden kann, was als No-Op-Autorisierung angesehen werden kann" Ich sah jede explizite Bestätigung, dass OAuth gut genug für das war, was ich tun wollte.
Als ich diese "Antwort" veröffentlichte, war ich zu diesem Zeitpunkt noch kein Mitglied und habe lange am Ende dieser Seite nach Möglichkeiten gesucht, mich zu identifizieren. Die Option, ein OpenID-Login zu verwenden oder eines zu erhalten, wenn ich keines hatte, aber nichts über Twitter oder Facebook, schien darauf hinzudeuten, dass OAuth für den Job nicht geeignet war. Aber dann öffnete ich ein anderes Fenster und suchte nach dem allgemeinen Anmeldevorgang für Stackoverflow - und siehe da, es gibt eine Reihe von Authentifizierungsoptionen von Drittanbietern, einschließlich Facebook und Twitter. Am Ende habe ich mich entschieden, meine Google-ID (eine OpenID) zu verwenden, genau aus dem Grund, dass ich keinen Stackoverflow-Zugriff auf meine Freundesliste gewähren wollte und alles andere, was Facebook gerne über seine Benutzer teilt - aber zumindest '
Es wäre wirklich großartig, wenn jemand entweder Informationen oder Hinweise auf Informationen zur Unterstützung dieser Art der Einrichtung mehrerer Berechtigungen für Drittanbieter veröffentlichen könnte und wie Sie mit Benutzern umgehen, die die Berechtigung widerrufen oder den Zugriff auf ihre Website von Drittanbietern verlieren. Ich habe auch den Eindruck, dass mein Benutzername hier ein eindeutiges Stackoverflow-Konto identifiziert, auf das ich mit der Basisauthentifizierung zugreifen kann, wenn ich es einrichten möchte, und dass ich auch über andere Authentifizierer von Drittanbietern auf dasselbe Konto zugreifen kann (z. B. damit ich als protokolliert betrachtet werde) in to stackoverflow, wenn ich bei Google, Facebook oder Twitter angemeldet war ...). Da diese Seite dies tut, hat wahrscheinlich jemand hier einen ziemlich guten Einblick in das Thema. :-)
Es tut mir leid, dass dies so lange gedauert hat und eher eine Frage als eine Antwort - aber Karls Bemerkung ließ es als den am besten geeigneten Ort erscheinen, um inmitten der Menge an Threads auf OAuth und OpenID zu posten. Wenn es dafür einen besseren Ort gibt, den ich nicht gefunden habe, entschuldige ich mich im Voraus, ich habe es versucht.
quelle
OpenID beweist, wer Sie sind.
OAuth gewährt Zugriff auf die von der autorisierenden Partei bereitgestellten Funktionen.
quelle
Ich arbeite derzeit an OAuth 2.0 und OpenID Connect Spec. Also hier ist mein Verständnis: Früher waren sie:
OAuth: OAuth sah es als Standard an, der sich mit all diesen proprietären Ansätzen befasste. Daher hatten wir OAuth 1.o als Standard, befassten uns jedoch nur mit der Autorisierung. Nicht viele Leute bemerkten es, aber es fing an zu wachsen. Dann hatten wir 2012 OAuth 2.0. CTOs, Architekten haben wirklich angefangen, Aufmerksamkeit zu schenken, als sich die Welt in Richtung Cloud Computing und Computergeräte in Richtung mobiler und anderer solcher Geräte bewegt. OAuth wurde als Lösung für ein großes Problem angesehen, bei dem Softwarekunden einem Unternehmen IDP-Service anbieten und viele Services von verschiedenen Anbietern wie Salesforce, SAP usw. erhalten. Die Integration hier sieht also wirklich wie ein Verbundszenario aus, ein großes Problem, die Verwendung von SAML ist kostspielig Lassen Sie uns also OAuth 2.o erkunden. Ohh, ich habe einen wichtigen Punkt übersehen, den Google in dieser Zeit gespürt hat, dass OAuth dies tatsächlich nicht tut.
ein. OAuth 2.o sagt nicht klar, wie die Kundenregistrierung erfolgen wird. B. Es wird nichts über die Interaktion zwischen SP (Resource Server) und Client-Anwendung erwähnt (wie Analytics Server, der Daten bereitstellt, ist Resource Server und Anwendung, die anzeigt, dass Daten Client sind).
Technisch gesehen gibt es hier bereits wunderbare Antworten. Ich dachte daran, eine kurze Evolutionsperspektive zu geben
quelle
OpenId verwendet OAuth für die Authentifizierung.
Analog dazu basiert .NET auf der Windows-API. Sie können die Windows-API direkt aufrufen, aber die Argumente sind so umfangreich, komplex und methodisch, dass Sie leicht Fehler / Bugs / Sicherheitsprobleme machen können.
Gleiches gilt für OpenId / OAuth. OpenId verwendet OAuth, um die Authentifizierung zu verwalten, definiert jedoch ein bestimmtes Token (Id_token), eine digitale Signatur und bestimmte Flows.
quelle
Ich möchte auf einen bestimmten Aspekt dieser Frage eingehen, der in diesem Kommentar festgehalten ist:
Ja und nein. Die Antwort ist subtil, also nimm sie mit.
Wenn der OAuth-Flow Sie zu einem Zieldienst (dh dem OAuth-Anbieter) umleitet, müssen Sie sich wahrscheinlich bei diesem Dienst authentifizieren, bevor ein Token an die Clientanwendung / den Clientdienst zurückgegeben wird. Das resultierende Token ermöglicht es der Client-App dann, Anforderungen für einen bestimmten Benutzer zu stellen.
Beachten Sie die Allgemeinheit dieses letzten Satzes: Insbesondere habe ich "im Namen eines bestimmten Benutzers" geschrieben, nicht "im Namen von Ihnen ". Es ist ein häufiger Fehler anzunehmen, dass "die Fähigkeit zur Interaktion mit einer Ressource eines bestimmten Benutzers" impliziert, dass "Sie und der Eigentümer der Zielressource (n) eins in derselben sind".
Mach diesen Fehler nicht.
Es stimmt zwar, dass Sie sich beim OAuth-Anbieter authentifizieren (z. B. nach Benutzername und Kennwort oder möglicherweise nach SSL-Client-Zertifikaten oder auf andere Weise), aber das, was der Client als Gegenleistung erhält, sollte nicht unbedingt als Identitätsnachweis angesehen werden. Ein Beispiel wäre ein Ablauf, in dem der Zugriff auf die Ressourcen eines anderen Benutzers an Sie (und per Proxy, den OAuth-Client) delegiert wurde . Die Autorisierung impliziert keine Authentifizierung.
Um die Authentifizierung zu handhaben, sollten Sie sich OpenID Connect ansehen, eine weitere Ebene auf der von OAuth 2.0 festgelegten Grundlage. Hier ist ein Zitat, das (meiner Meinung nach) die wichtigsten Punkte in Bezug auf OpenID Connect (von https://oauth.net/articles/authentication/ ) erfasst :
Das Dokument beschreibt dann (unter anderem) Token-IDs und einen UserInfo-Endpunkt. Ersteres bietet eine Reihe von Ansprüchen (wer Sie sind, wann das Token ausgestellt wurde usw.) und möglicherweise eine Signatur, um die Authentizität des Tokens über einen veröffentlichten öffentlichen Schlüssel zu überprüfen, ohne den Upstream-Dienst fragen zu müssen), und letzteres bietet eine Mittel, z. B. auf standardisierte Weise nach dem Vor- / Nachnamen, der E-Mail-Adresse und ähnlichen Informationen des Benutzers zu fragen (im Gegensatz zu den Ad-hoc-Erweiterungen für OAuth, die vor OpenID Connect standardisiert wurden).
quelle
Beide Protokolle wurden aus unterschiedlichen Gründen erstellt. OAuth wurde erstellt, um Dritte zum Zugriff auf Ressourcen zu autorisieren. OpenID wurde erstellt, um eine dezentrale Identitätsvalidierung durchzuführen. Diese Website enthält Folgendes:
OAuth ist ein Protokoll zur Überprüfung der Identität eines Endbenutzers und zur Erteilung von Berechtigungen an Dritte. Diese Überprüfung führt zu einem Token. Der Dritte kann dieses Token verwenden, um im Namen des Benutzers auf Ressourcen zuzugreifen. Token haben einen Gültigkeitsbereich. Der Bereich wird verwendet, um zu überprüfen, ob eine Ressource für einen Benutzer zugänglich ist oder nicht
OpenID ist ein Protokoll zur dezentralen Authentifizierung. Bei der Authentifizierung geht es um Identität. Die Einrichtung des Benutzers ist in der Tat die Person, die er zu sein behauptet. Wenn Sie dies dezentralisieren, ist diesem Dienst nicht bekannt, ob Ressourcen oder Anwendungen vorhanden sind, die geschützt werden müssen. Das ist der Hauptunterschied zwischen OAuth und OpenID.
quelle
OpenID Connect erweitert das OAuth 2.0-Autorisierungsprotokoll um die Verwendung als Authentifizierungsprotokoll, sodass Sie Single Sign-On mit OAuth durchführen können. OpenID Connect führt das Konzept eines ID-Tokens ein, bei dem es sich um ein Sicherheitstoken handelt, mit dem der Client die Identität des Benutzers überprüfen kann
quelle
OAuth 2.0 ist ein Sicherheitsprotokoll. Es ist weder eine Authentifizierung noch ein Autorisierungsprotokoll.
Die Authentifizierung per Definition beantwortet zwei Fragen.
OAuth 2.0 verfügt über die folgenden Grant-Typen
Alle 4 haben eines gemeinsam: access_token, ein Artefakt, mit dem auf geschützte Ressourcen zugegriffen werden kann.
Das access_token gibt keine Antwort auf die beiden Fragen, die ein "Authentifizierungs" -Protokoll beantworten muss.
Ein Beispiel zur Erklärung von Oauth 2.0 (Credits: OAuth 2 in Aktion, Manning-Veröffentlichungen)
Reden wir über Schokolade. Wir können viele Süßigkeiten aus Schokolade herstellen, darunter Fudge, Eis und Kuchen. Keines davon kann jedoch mit Schokolade gleichgesetzt werden, da für die Herstellung des Konfekts mehrere andere Zutaten wie Sahne und Brot benötigt werden, obwohl Schokolade wie die Hauptzutat klingt. In ähnlicher Weise ist OAuth 2.0 die Schokolade, und Cookies, TLS-Infrastruktur und Identitätsanbieter sind weitere Zutaten, die für die Bereitstellung der "Authentifizierungs" -Funktionalität erforderlich sind.
Wenn Sie eine Authentifizierung wünschen, können Sie sich für OpenID Connect entscheiden, das neben einem access_token ein "id_token" bereitstellt, das die Fragen beantwortet, die jedes Authentifizierungsprotokoll beantworten muss.
quelle
OAuth erstellt die Authentifizierung zusätzlich zur Autorisierung: Der Benutzer delegiert den Zugriff auf seine Identität an die Anwendung, die dann zum Konsumenten der Identitäts-API wird, um herauszufinden, wer den Client überhaupt autorisiert hat. Http://oauth.net/ Artikel / Authentifizierung /
quelle