Wie ich es verstehe, tritt die folgende Kette von Ereignissen in OAuth 2 , um Site-A
den Zugriff des Benutzers Informationen aus Site-B
.
Site-A
registriert sichSite-B
und erhält ein Geheimnis und einen Ausweis.- Wenn Benutzer sagt für
Site-A
den ZugriffSite-B
, Benutzer wird gesendet ,Site-B
wo sie sagenSite-B
, sie würden in der Tat wie zu geben ,Site-A
Berechtigungen für spezifische Informationen. Site-B
Umleitungen Benutzer zurück zuSite-A
, zusammen mit einem Autorisierungscode.Site-A
Anschließend wird dieser Autorisierungscode zusammen mit seinem Geheimnis alsSite-B
Gegenleistung für ein Sicherheitstoken an zurückgegeben.Site-A
Anschließend werdenSite-B
im Namen des Benutzers Anforderungen an das Sicherheitstoken zusammen mit den Anforderungen gestellt.
Wie funktioniert all dies in Bezug auf Sicherheit und Verschlüsselung auf hohem Niveau? Wie schützt OAuth 2 mit dem Sicherheitstoken vor Wiederholungsangriffen?
code
), aber es gibt andere in OAuth 2.0 definierte Grant-Typen, die für verschiedene Anwendungsfälle relevant sind (z. B. nicht benutzerbezogene).Antworten:
Wie OAuth 2.0 im wirklichen Leben funktioniert:
Ich fuhr auf dem Weg zur Arbeit an Olafs Bäckerei vorbei, als ich den köstlichsten Donut im Fenster sah - ich meine, das Ding tropfte von schokoladiger Güte. Also ging ich hinein und forderte "Ich muss diesen Donut haben!". Er sagte: "Sicher, das sind 30 Dollar."
Ja, ich weiß, 30 Dollar für einen Donut! Es muss lecker sein! Ich griff nach meiner Brieftasche, als ich plötzlich den Koch "NEIN! Kein Donut für dich" schreien hörte. Ich fragte: warum? Er sagte, er akzeptiere nur Banküberweisungen.
Ernsthaft? Ja, er meinte es ernst. Ich wäre fast genau dort weggegangen, aber dann rief mir der Donut zu: "Iss mich, ich bin köstlich ...". Wer bin ich, um Befehle von einem Donut nicht zu befolgen? Ich sagte OK.
Er gab mir eine Notiz mit seinem Namen (der Koch, nicht der Donut): "Sag ihnen, dass Olaf dich geschickt hat". Sein Name stand bereits auf dem Zettel, daher weiß ich nicht, wozu das gut war, aber ok.
Ich fuhr anderthalb Stunden zu meiner Bank. Ich gab dem Kassierer die Notiz; Ich sagte ihr, Olaf habe mich geschickt. Sie gab mir einen dieser Blicke, die Art, die sagt, "ich kann lesen".
Sie nahm meine Notiz, fragte nach meinem Ausweis und fragte mich, wie viel Geld in Ordnung sei, um ihn zu geben. Ich sagte ihr 30 Dollar. Sie kritzelte und gab mir eine weitere Notiz. Dieser hatte eine Reihe von Zahlen drauf, ich schätze, so behalten sie die Notizen im Auge.
An diesem Punkt verhungere ich. Eineinhalb Stunden später war ich wieder da und stand mit ausgestreckter Notiz vor Olaf. Er nahm es, sah es sich an und sagte: "Ich komme wieder."
Ich dachte, er würde meinen Donut bekommen, aber nach 30 Minuten wurde ich misstrauisch. Also fragte ich den Mann hinter der Theke "Wo ist Olaf?". Er sagte "Er ging, um Geld zu bekommen". "Was meinst du?". "Er nimmt Notiz zur Bank".
Huh ... also nahm Olaf die Notiz, die mir die Bank gegeben hatte und ging zurück zur Bank, um Geld von meinem Konto zu bekommen. Da er die Notiz hatte, die die Bank mir gab, wusste die Bank, dass er der Typ war, über den ich sprach, und weil ich mit der Bank sprach, wussten sie, dass sie ihm nur 30 Dollar geben sollten.
Ich musste lange gebraucht haben, um das herauszufinden, denn als ich aufblickte, stand Olaf vor mir und reichte mir endlich meinen Donut. Bevor ich ging, musste ich fragen: "Olaf, hast du Donuts immer so verkauft?". "Nein, ich habe es früher anders gemacht."
Huh. Als ich zu meinem Auto zurückging, klingelte mein Telefon. Ich habe nicht geantwortet, es war wahrscheinlich meine Aufgabe, mich zu entlassen, mein Chef ist so ein Arschloch. Außerdem habe ich über den Prozess nachgedacht, den ich gerade durchlaufen habe.
Ich meine, denken Sie darüber nach: Ich konnte Olaf 30 Dollar von meinem Bankkonto abheben lassen, ohne ihm meine Kontoinformationen geben zu müssen. Und ich musste mir keine Sorgen machen, dass er zu viel Geld herausnehmen würde, weil ich der Bank bereits sagte, er dürfe nur 30 Dollar nehmen. Und die Bank wusste, dass er der richtige war, weil er die Notiz hatte, die sie mir gegeben hatten, um sie Olaf zu geben.
Ok, sicher, ich würde ihm lieber 30 Dollar aus meiner Tasche geben. Aber jetzt, wo er diesen Zettel hatte, konnte ich der Bank einfach sagen, dass er jede Woche 30 Dollar nehmen soll, dann konnte ich einfach in der Bäckerei auftauchen und musste nicht mehr zur Bank gehen. Ich könnte den Donut sogar telefonisch bestellen, wenn ich wollte.
Natürlich würde ich das nie tun - dieser Donut war widerlich.
Ich frage mich, ob dieser Ansatz breitere Anwendungen hat. Er erwähnte, dies sei sein zweiter Ansatz, ich könnte es Olaf 2.0 nennen. Wie auch immer, ich komme besser nach Hause, ich muss mich auf die Suche nach einem neuen Job machen. Aber nicht bevor ich einen dieser Erdbeershakes von diesem neuen Ort in der Stadt bekomme, brauche ich etwas, um den Geschmack dieses Donuts wegzuwaschen.
quelle
Basierend auf dem, was ich gelesen habe, funktioniert alles so:
Der in der Frage beschriebene allgemeine Ablauf ist korrekt. In Schritt 2 wird Benutzer X authentifiziert und autorisiert auch den Zugriff von Site A auf die Informationen von Benutzer X auf Site B. In Schritt 4 gibt die Site ihr Geheimnis an Site B zurück und authentifiziert sich selbst sowie den Autorisierungscode und gibt an, was es fragt nach (dem Zugriffstoken von Benutzer X).
Insgesamt ist OAuth 2 ein sehr einfaches Sicherheitsmodell, und die Verschlüsselung kommt nie direkt ins Spiel. Stattdessen sind sowohl das geheime als auch das Sicherheitstoken im Wesentlichen Kennwörter, und das Ganze wird nur durch die Sicherheit der https-Verbindung gesichert.
OAuth 2 bietet keinen Schutz gegen Wiederholungsangriffe des Sicherheitstokens oder des Geheimnisses. Stattdessen ist Site B ausschließlich dafür verantwortlich, dass diese Elemente für diese Elemente verantwortlich sind und sie nicht herauskommen, und dass sie während der Übertragung über https gesendet werden (https schützt URL-Parameter).
Der Zweck des Autorisierungscode-Schritts ist einfach die Bequemlichkeit, und der Autorisierungscode ist für sich genommen nicht besonders sensibel. Es bietet eine allgemeine Kennung für das Zugriffstoken von Benutzer X für Site A, wenn Site B nach dem Zugriffstoken von Benutzer X gefragt wird. Nur die Benutzer-ID von Benutzer X auf Site B hätte nicht funktioniert, da möglicherweise viele ausstehende Zugriffstoken darauf warten, gleichzeitig an verschiedene Sites verteilt zu werden.
quelle
OAuth ist ein Protokoll, mit dem eine Drittanbieter-App ohne Ihr Konto und Passwort auf Ihre auf einer anderen Website gespeicherten Daten zugreifen kann. Eine offiziellere Definition finden Sie im Wiki oder in der Spezifikation.
Hier ist eine Anwendungsfall-Demo:
Ich melde mich bei LinkedIn an und möchte einige Freunde in meinen Google Mail-Kontakten verbinden. LinkedIn unterstützt dies. Es wird eine sichere Ressource (meine Google Mail-Kontaktliste) von Google Mail angefordert. Also klicke ich auf diese Schaltfläche:
Eine Webseite wird angezeigt und zeigt die Google Mail-Anmeldeseite an, wenn ich mein Konto und mein Passwort eingebe:
Google Mail zeigt dann eine Einwilligungsseite an, auf der ich auf "Akzeptieren" klicke:
Jetzt kann LinkedIn auf meine Kontakte in Google Mail zugreifen:
Unten sehen Sie ein Flussdiagramm des obigen Beispiels:
Schritt 1: LinkedIn fordert ein Token vom Autorisierungsserver von Google Mail an.
Schritt 2: Der Google Mail-Autorisierungsserver authentifiziert den Ressourcenbesitzer und zeigt dem Benutzer die Einwilligungsseite an. (Der Benutzer muss sich bei Google Mail anmelden, wenn er noch nicht angemeldet ist.)
Schritt 3: Der Benutzer erteilt LinkedIn die Anforderung, auf die Google Mail-Daten zuzugreifen.
Schritt 4: Der Google Mail-Autorisierungsserver antwortet mit einem Zugriffstoken.
Schritt 5: LinkedIn ruft die Google Mail-API mit diesem Zugriffstoken auf.
Schritt 6: Der Google Mail-Ressourcenserver gibt Ihre Kontakte zurück, wenn das Zugriffstoken gültig ist. (Das Token wird vom Google Mail-Ressourcenserver überprüft.)
Weitere Informationen zu OAuth finden Sie hier .
quelle
Abbildung 1 aus RFC6750 :
quelle
So funktioniert Oauth 2.0, das in diesem Artikel ausführlich erläutert wird
quelle
Dies ist ein Juwel:
https://www.digitalocean.com/community/tutorials/an-introduction-to-oauth-2
Sehr kurze Zusammenfassung:
OAuth definiert vier Rollen:
Sie (Ressourcenbesitzer) haben ein Mobiltelefon. Sie haben mehrere verschiedene E-Mail-Konten, möchten jedoch alle Ihre E-Mail-Konten in einer App haben, sodass Sie nicht ständig wechseln müssen. Ihr GMail (Client) fordert daher den Zugriff (über den Autorisierungsserver von Yahoo) auf Ihre Yahoo-E-Mails (Resource Server) an, damit Sie beide E-Mails in Ihrer GMail-Anwendung lesen können.
Der Grund, warum OAuth existiert, ist, dass es für GMail nicht sicher ist, Ihren Yahoo-Benutzernamen und Ihr Passwort zu speichern.
quelle
Die andere Antwort ist sehr detailliert und befasst sich mit dem Großteil der vom OP aufgeworfenen Fragen.
Um die Frage des OP "Wie schützt OAuth 2 vor Wiederholungsangriffen mit dem Sicherheitstoken?" Zu erläutern und speziell zu beantworten, sind in den offiziellen Empfehlungen für die Implementierung von OAuth 2 zwei zusätzliche Schutzmaßnahmen enthalten :
1) Tokens haben normalerweise eine kurze Ablauffrist ( http://tools.ietf.org/html/rfc6819#section-5.1.5.3 ):
2) Wenn das Token von Site A verwendet wird, wird empfohlen, dass es nicht als URL-Parameter, sondern im Feld Header der Autorisierungsanforderung ( http://tools.ietf.org/html/rfc6750 ) angezeigt wird :
quelle
Hier ist vielleicht die einfachste Erklärung, wie OAuth2 für alle 4 Grant-Typen funktioniert, dh 4 verschiedene Flows, in denen die App das Zugriffstoken erwerben kann.
Ähnlichkeit
Alle Grant-Flows bestehen aus 2 Teilen:
Der zweite Teil 'Zugriffstoken verwenden' ist für alle Flows gleich
Unterschied
Der erste Teil des Ablaufs "Zugriffstoken abrufen" für jeden Grant-Typ variiert.
Im Allgemeinen kann der Teil "Zugriffstoken abrufen" jedoch in 5 Schritten zusammengefasst werden:
In diesem nebeneinander angeordneten Diagramm wird anhand der 5 Schritte verglichen, wie sich die einzelnen Zuschussarten unterscheiden.
Dieses Diagramm stammt von https://blog.oauth.io/introduction-oauth2-flow-diagrams/
Jeder hat unterschiedliche Schwierigkeitsgrade, Sicherheits- und Anwendungsfälle. Abhängig von Ihren Bedürfnissen und Ihrer Situation müssen Sie eine davon verwenden. Welche verwenden?
Client-Berechtigungsnachweis : Wenn Ihre App nur einen einzelnen Benutzer bedient
Kennwort des Ressourcenbesitzers Crendential : Dies sollte nur als letzter Ausweg verwendet werden, da der Benutzer seine Anmeldeinformationen an die App übergeben muss . Dies bedeutet, dass die App alles tun kann, was der Benutzer kann
Autorisierungscode : Der beste Weg, um eine Benutzerautorisierung zu erhalten
Implizit : Wenn Ihre App eine mobile oder einseitige App ist
Weitere Erklärungen zur Auswahl finden Sie hier: https://blog.oauth.io/choose-oauth2-flow-grant-types-for-app/
quelle