Was ist der Unterschied zwischen OpenID und OAuth?


967

Ich versuche wirklich, den Unterschied zwischen OpenID und OAuth zu verstehen. Vielleicht sind es zwei völlig getrennte Dinge?


4
Dies kann hilfreich sein, um zu verstehen, dass OAuth kein Authentifizierungsframework ist - während OpenID und OpenID Connect .. blog.api-security.org/2013/02/…
Prabath Siriwardena

2
OpenID Connect (2014) kombiniert die Funktionen von OpenID 2.0, OpenID Attribute Exchange 1.0 und OAuth 2.0 in einem einzigen Protokoll. security.stackexchange.com/questions/44611/…
Michael Freidgeim

1
Dies ist eine großartige Erklärung für den Zweck jedes Standards: stackoverflow.com/a/33704657/557406
Charles L.

Antworten:


836

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.


6
Nur alle Informationen erhalten. Hoffe, dieser OpenID & OAuth-Vergleich ist nützlich.
Raksja

202
Das stimmt nicht mehr wirklich. OAuth2 kann zur Authentifizierung und Autorisierung verwendet werden. Google APIs verwenden OAuth 2.0 zur Authentifizierung und Autorisierung. Sie können auch das Authentifizierungssystem von Google verwenden, um die Benutzerauthentifizierung für Ihre Anwendung auszulagern. Der einzige Nachteil, den ich bei OpenID sehen kann, ist, dass Sie es pro Standort implementieren müssen. Positiv zu vermerken ist jedoch, dass es sich ordnungsgemäß in Android integrieren lässt.
Timmmm

28
"OpenID Connect" sorgt für noch mehr Verwirrung, da es sich tatsächlich um eine OAuth v2 mit einer geringfügigen Erweiterung handelt.
Vilmantas Baranauskas

5
Single Sign On (SSO)
Richard

3
@Timmmm, "OAuth 2.0 ist kein Authentifizierungsprotokoll", wie hier erwähnt . Es gibt ein weiteres hilfreiches Video hier
RayLoveless

362

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.


6
Vielen Dank, ich hatte in diesem Zusammenhang große Probleme mit den Worten "Federated" und "Discovery", und die Antwort klärt es perfekt auf.
Aditya MP

3
Eine gute Antwort, aber ich bin etwas verwirrt mit "Die Ausnahme der weißen Listen". Haben Sie Ausschlüsse auf der weißen Liste?
Crypth

3
OAuth endet nicht mit der Authentifizierung, sondern stellt ein Zugriffstoken bereit, um Zugriff auf zusätzliche Ressourcen zu erhalten, die vom selben Drittanbieter-Service bereitgestellt werden. Nicht genau. Von rfc6749 : Der Autorisierungsserver kann derselbe Server wie der Ressourcenserver oder eine separate Entität sein. Ein einzelner Autorisierungsserver kann Zugriffstoken ausstellen, die von mehreren Ressourcenservern akzeptiert werden.
Eugene Yarmash

110

OpenID dient (hauptsächlich) zur Identifizierung / Authentifizierung, sodass stackoverflow.comich weiß chris.boyle.name(oder wo auch immer), dass ich wahrscheinlich dieselbe Person bin, die chris.boyle.namegestern 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.


23
Aber wenn Sie Twitter autorisiert haben, in Ihrem Namen Maßnahmen zu ergreifen, bedeutet dies, dass Sie die Person sind, von der Sie sagen, dass Sie es sind - also kombiniert es beides?
David d C e Freitas

3
David, du hast recht. Google macht es so.
Timmmm

2
Es hört sich so an, als würde die Website eines Drittanbieters mit oauth ein Token erhalten, mit dem sie Aktionen auf der Website des oauth-Anbieters ausführen könnte (z. B. in Ihrem Namen twittern), aber das Abrufen der Benutzeridentität (Benutzername) ist nicht in das integriert Protokoll, so dass Anbieter das als benutzerdefinierte Ressource hinzufügen müssen.
Nur

Ist es nicht so, dass Stack Overflow oder andere Websites, die zu Stackoverflow gehören, wie Serverfault, OAuth für die Anmeldung neuer Benutzer über Google oder Facebook und OpenID für die Anmeldung über eine andere Website ihrer Domain wie Serverfault oder Askubuntu verwenden? In OAuth können wir einschränken, welche Informationen vom Identitätsanbieter (Facebook) zum Dienstanbieter (Stackoverflow) fließen. In OpenID geben wir einfach ein Zertifikat, das die Person als legal symbolisiert, und gewähren Zugriff auf die gesamte Datenbank. Da Stackoverflow oder Askubuntu zur selben Domäne gehören, können sie Zertifikate mit vollem Zugriff auf Benutzerdatenbanken austauschen.
Revanth Kumar

1
@ jlo-gmail OAuth 2.0 enthält zu diesem Zweck Aktualisierungstoken: Sie verwenden gelegentlich das Aktualisierungstoken, um ein neues Zugriffstoken zu erhalten. Weitere Informationen: tools.ietf.org/html/rfc6749#section-1.5
Chris Boyle

93

Viele Leute besuchen dies immer noch, deshalb hier ein sehr einfaches Diagramm, um es zu erklären

OpenID_vs._pseudo-authentication_using_OAuth

Mit freundlicher Genehmigung von Wikipedia


13
Sollte es im OAuth-Beispiel keinen weiteren Schritt geben, in dem die Android-App den Valet-Schlüssel verwendet, um mit Google zu kommunizieren und die Identität des Benutzers zu ermitteln?
Nur keiner

Ich denke, der fehlende Schritt sollte allgemeiner sein. Das heißt, es geht nicht so sehr um Identität, sondern um Daten, die über die API bereitgestellt werden können. Dh Ihre Google-Fotos oder Ihre G-Mail-E-Mails, die die Android-App für jeden Zweck verwenden kann. Natürlich kann auf die Identität über die API zugegriffen werden.
Satellit779

3
Sollte es für OAuth "Gib mir den Parkservice-Schlüssel für dein Haus, damit ich auf dein Haus zugreifen / es ändern kann (wie erlaubt)"?
Hendryanw

42

OAuth

Wird nur für delegierte authorizationBenutzer 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 ist

Das 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 authenticateeinmaligen 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.


7
Sie könnten OAuth sicherlich auch zur Authentifizierung von Single Sign-On verwenden?
Timmmm

34

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".


Diese Erklärung gefällt mir sehr gut. Ich bin jedoch mehr als glücklich, dass Google meine Anmeldeinformationen mit der OTP-Implementierung verarbeitet, die sich über dem Login befindet.
Natalie Adams

25
  • OpenID ist ein offenes Standard- und dezentrales Authentifizierungsprotokoll, das von der OpenID Foundation gesteuert wird.
  • OAuth ist ein offener Standard für die Zugriffsdelegierung.
  • OpenID Connect (OIDC) Kombiniert die Funktionen von OpenID und OAuth, dh sowohl Authentifizierung als auch Autorisierung.

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 .

Geben Sie hier die Bildbeschreibung ein

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


19

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.


14

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/


14

Die Erklärung des Unterschieds zwischen OpenID, OAuth und OpenID Connect:

OpenID ist ein Protokoll zur Authentifizierung, während OAuth zur Autorisierung dient. Bei der Authentifizierung geht es darum, sicherzustellen, dass der Typ, mit dem Sie sprechen, tatsächlich der ist, für den er sich ausgibt. Bei der Autorisierung geht es darum zu entscheiden, was dieser Kerl tun darf.

In OpenID wird die Authentifizierung delegiert: Server A möchte Benutzer U authentifizieren, aber die Anmeldeinformationen von U (z. B. Name und Kennwort von U) werden an einen anderen Server B gesendet, dem A vertraut (zumindest Vertrauensstellungen zur Authentifizierung von Benutzern). In der Tat stellt Server B sicher, dass U tatsächlich U ist, und sagt dann zu A: "OK, das ist das echte U".

In OAuth wird die Autorisierung delegiert: Entität A erhält von Entität B ein "Zugriffsrecht", das A Server S zeigen kann, um Zugriff zu erhalten; B kann somit temporäre, spezifische Zugriffsschlüssel an A liefern, ohne ihnen zu viel Strom zu geben. Sie können sich einen OAuth-Server als Schlüsselmaster in einem großen Hotel vorstellen. Er gibt den Mitarbeitern Schlüssel, die die Türen der Räume öffnen, die sie betreten sollen, aber jeder Schlüssel ist begrenzt (es gibt nicht Zugang zu allen Räumen). Außerdem zerstören sich die Schlüssel nach einigen Stunden selbst.

Bis zu einem gewissen Grad kann die Autorisierung für eine Pseudoauthentifizierung missbraucht werden, auf der Grundlage, dass, wenn Entität A über OAuth einen Zugriffsschlüssel von B erhält und ihn Server S anzeigt, Server S möglicherweise darauf schließen kann, dass B A authentifiziert hat, bevor er den Zugriff gewährt Schlüssel. Einige Leute verwenden OAuth dort, wo sie OpenID verwenden sollten. Dieses Schema kann aufschlussreich sein oder auch nicht. Aber ich denke, diese Pseudoauthentifizierung ist verwirrender als alles andere. OpenID Connect macht genau das: Es missbraucht OAuth in einem Authentifizierungsprotokoll. In der Hotelanalogie: Wenn ich einem angeblichen Mitarbeiter begegne und dieser mir zeigt, dass er einen Schlüssel hat, der mein Zimmer öffnet, dann nehme ich an, dass dies ein echter Mitarbeiter ist, auf der Grundlage, dass der Schlüsselmeister ihm keinen Schlüssel gegeben hätte Das öffnet mein Zimmer, wenn er es nicht war.

(Quelle)

Wie unterscheidet sich OpenID Connect von OpenID 2.0?

OpenID Connect führt viele der gleichen Aufgaben wie OpenID 2.0 aus, jedoch auf eine Weise, die API-freundlich ist und von nativen und mobilen Anwendungen verwendet werden kann. OpenID Connect definiert optionale Mechanismen für robustes Signieren und Verschlüsseln. Während für die Integration von OAuth 1.0a und OpenID 2.0 eine Erweiterung erforderlich war, sind in OpenID Connect die OAuth 2.0-Funktionen in das Protokoll selbst integriert.

(Quelle)

OpenID Connect gibt Ihnen ein Zugriffstoken sowie ein ID-Token. Das ID-Token ist ein JWT und enthält Informationen zum authentifizierten Benutzer. Es ist vom Identitätsanbieter signiert und kann gelesen und überprüft werden, ohne auf den Identitätsanbieter zuzugreifen.

Darüber hinaus standardisiert OpenID Connect einige Dinge, die oauth2 der Wahl überlässt. Zum Beispiel Bereiche, Endpunkterkennung und dynamische Registrierung von Clients.

Dies erleichtert das Schreiben von Code, mit dem der Benutzer zwischen mehreren Identitätsanbietern wählen kann.

(Quelle)

Googles OAuth 2.0

Die OAuth 2.0-APIs von Google können sowohl zur Authentifizierung als auch zur Autorisierung verwendet werden. Dieses Dokument beschreibt unsere OAuth 2.0-Implementierung für die Authentifizierung, die der OpenID Connect-Spezifikation entspricht und OpenID-zertifiziert ist. Die Dokumentation unter Verwenden von OAuth 2.0 für den Zugriff auf Google-APIs gilt auch für diesen Dienst. Wenn Sie dieses Protokoll interaktiv erkunden möchten, empfehlen wir den Google OAuth 2.0-Spielplatz .

(Quelle)


2
Schöne Erklärung. +1 dafür.
Ataur Rahman Munna

11

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.


3

OpenID beweist, wer Sie sind.

OAuth gewährt Zugriff auf die von der autorisierenden Partei bereitgestellten Funktionen.


2
OAuth: Bevor Sie Zugriff auf eine Funktion gewähren, muss die Authentifizierung durchgeführt werden, oder? also OAuth = welche OpenId + gewährt Zugriff auf einige Funktionen?
Hassan Tareq

2

Ich arbeite derzeit an OAuth 2.0 und OpenID Connect Spec. Also hier ist mein Verständnis: Früher waren sie:

  1. OpenID war eine proprietäre Implementierung von Google, die Anwendungen von Drittanbietern wie Zeitungswebsites ermöglicht, mit denen Sie sich mit Google anmelden und einen Artikel usw. kommentieren können. Also im Wesentlichen keine Passwortfreigabe zur Zeitungswebsite. Lassen Sie mich hier eine Definition aufstellen. Dieser Ansatz im Unternehmensansatz heißt Föderation. In Federation haben Sie einen Server, auf dem Sie sich authentifizieren und autorisieren (IDP, Identity Provider genannt), und im Allgemeinen den Verwalter der Benutzeranmeldeinformationen. Die Client-Anwendung, in der Sie geschäftlich tätig sind, heißt SP oder Service Provider. Wenn wir zum gleichen Beispiel einer Zeitungswebsite zurückkehren, ist die Zeitungswebsite hier SP und Google IDP. Im Unternehmen wurde dieses Problem früher mit SAML gelöst. Zu dieser Zeit regierte XML die Softwareindustrie. Von den Webservices bis zur Konfiguration ging alles auf XML über, sodass wir SAML haben.
  2. 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


0

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.


0

Ich möchte auf einen bestimmten Aspekt dieser Frage eingehen, der in diesem Kommentar festgehalten ist:

OAuth: Bevor Sie Zugriff auf eine Funktion gewähren, muss die Authentifizierung durchgeführt werden, oder? also OAuth = welche OpenId + gewährt Zugriff auf einige Funktionen? - Hassan Makarov 21. Juni um 1:57 Uhr

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 :

OpenID Connect ist ein offener Standard, der Anfang 2014 veröffentlicht wurde und eine interoperable Methode zur Verwendung von OAuth 2.0 zur Durchführung der Benutzerauthentifizierung definiert. Im Wesentlichen handelt es sich um ein weit verbreitetes Rezept für Schokoladenfondant, das von einer Vielzahl von Experten erprobt und getestet wurde. Anstatt für jeden potenziellen Identitätsanbieter ein anderes Protokoll zu erstellen, kann eine Anwendung ein Protokoll mit so vielen Anbietern sprechen, wie sie arbeiten möchten. Da es sich um einen offenen Standard handelt, kann OpenID Connect von jedem ohne Einschränkungen oder Bedenken hinsichtlich des geistigen Eigentums implementiert werden.

OpenID Connect basiert direkt auf OAuth 2.0 und wird in den meisten Fällen direkt zusammen mit (oder über) einer OAuth-Infrastruktur bereitgestellt. OpenID Connect verwendet außerdem die JOSE-Suite (JSON Object Signing And Encryption) mit Spezifikationen, um signierte und verschlüsselte Informationen an verschiedenen Orten zu transportieren. Tatsächlich ist eine OAuth 2.0-Bereitstellung mit JOSE-Funktionen bereits ein langer Weg, um ein vollständig kompatibles OpenID Connect-System zu definieren, und das Delta zwischen beiden ist relativ klein. Dieses Delta macht jedoch einen großen Unterschied, und OpenID Connect kann viele der oben diskutierten Fallstricke vermeiden, indem der OAuth-Basis mehrere Schlüsselkomponenten hinzugefügt werden: [...]

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).


0

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.


0

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


-1

OAuth 2.0 ist ein Sicherheitsprotokoll. Es ist weder eine Authentifizierung noch ein Autorisierungsprotokoll.

Die Authentifizierung per Definition beantwortet zwei Fragen.

  1. Wer ist der Benutzer?
  2. Ist der Benutzer aktuell im System vorhanden?

OAuth 2.0 verfügt über die folgenden Grant-Typen

  • client_credentials: Wenn eine App mit einer anderen App interagieren und die Daten mehrerer Benutzer ändern muss.
  • Autorisierungscode: Der Benutzer delegiert den Autorisierungsserver, um ein Zugriffstoken auszugeben, mit dem der Client auf geschützte Ressourcen zugreifen kann
  • refresh_token: Wenn das access_token abläuft, kann das Aktualisierungstoken genutzt werden, um ein neues access_token zu erhalten
  • Kennwort: Der Benutzer gibt seine Anmeldeinformationen an einen Client weiter, der den Autorisierungsserver aufruft und ein access_token erhält

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.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.