it-swarm.com.de

Was ist der Unterschied zwischen OAuth-basierter und Token-basierter Authentifizierung?

Ich dachte, dass OAuth im Grunde eine tokenbasierte Authentifizierungsspezifikation ist, aber die meisten Zeitrahmen wirken so, als ob es einen Unterschied zwischen ihnen gibt. Wie in der Abbildung unten gezeigt, werden Sie in Jhipster gefragt, ob Sie eine OAuth-basierte oder eine tokenbasierte Authentifizierung verwenden möchten. 

Ist das nicht dasselbe? Was genau ist der Unterschied, da beide Marken in ihren Implementierungen enthalten?

 enter image description here

49
Cemre

Dies ist eine gute Frage - es gibt viel Verwirrung um Marken und OAuth.

Wenn Sie OAuth erwähnen, beziehen Sie sich wahrscheinlich auf den OAuth2-Standard . Dies ist die neueste Version des OAuth-Protokolls, über die die meisten Leute spezifisch reden, wenn sie 'OAuth' sagen.

Das OAuth-Protokoll unterstützt verschiedene Arten der Authentifizierung und Autorisierung (4, um genau zu sein).

Zweitens funktioniert das OAuth-Protokoll, indem Benutzer über Tokens authentifiziert werden. Die Idee hier ist diese:

Anstatt, dass Ihr Benutzer bei jeder einzelnen Anfrage seine tatsächlichen Anmeldeinformationen an Ihren Server sendet (wie bei Basic Auth, wo ein Benutzer seinen Benutzernamen und sein Kennwort für jede Anfrage an den Server sendet), tauschen Sie zuerst mit OAuth Ihre Anmeldeinformationen für eine 'token' und authentifizieren Sie dann Benutzer anhand dieses 'token'.

Die Idee von OAuth besteht darin, dass Benutzer weniger vertrauliche Anmeldeinformationen seltener über das Netzwerk weitergeben müssen, wodurch weniger schlechte Dinge passieren können. (Das ist sowieso die Idee.)

Hier kommen Token ins Spiel: Die OAuth-Spezifikation basiert auf dem Konzept von Token, legt jedoch nicht fest, was ein Token ist.

Im allgemeinen Sinne ist ein Token nur eine Zeichenfolge, die einen Benutzer eindeutig identifiziert. Das ist es.

Die Leute erkannten dies und entwickelten einen neuen Standard für das Erstellen von Token, den JSON Web Token-Standard . Dieser Standard enthält im Wesentlichen eine Reihe von Regeln zum Erstellen von Token auf sehr spezifische Weise, wodurch Token allgemein für Sie nützlicher werden.

JWTs lassen Sie Dinge tun wie:

  • Kennzeichnen Sie ein Token kryptografisch, damit Sie wissen, dass ein Token von einem Benutzer nicht manipuliert wurde.
  • Verschlüsseln Sie Token, damit der Inhalt nicht im Klartext gelesen werden kann.
  • Betten Sie JSON-Daten INSIDE eines Token-Strings standardmäßig ein.

Nun, zum größten Teil: So ziemlich jeder in der Entwicklungsgemeinschaft hat zugestimmt, dass, wenn Sie irgendeine Art von OAuth verwenden, die Token, die Sie verwenden, JSON-Web-Token sein sollten.

==========

OK! Nun, da wir die Hintergrundgeschichte behandelt haben, lassen Sie mich Ihre Frage beantworten.

Die Entscheidung, die Sie oben treffen, ist, ob Sie die vollständige OAuth2-Spezifikation für die Authentifizierung/Autorisierung aktivieren möchten (was sehr komplex ist) oder ob Sie einfach eine grundlegende "Token-Authentifizierung" wünschen.

Da das OAuth-Protokoll mehrere verschiedene Methoden für die Authentifizierung auf STANDARDS COMPLIANT-Basis bietet, wird die Authentifizierung der meisten Authentifizierungssysteme erheblich erschwert.

Aus diesem Grund bieten viele Frameworks eine "überflüssige" Version des OAuth2 Password Grant-Flusses. Dies ist im Wesentlichen eine einfache Methode, bei der:

  • Ein Benutzer sendet seinen Benutzernamen und sein Kennwort unter einer bestimmten URL wie/login an Ihren Server.
  • Ihr Server generiert ein JWT-Token für den Benutzer.
  • Ihr Server gibt dieses Token an den Benutzer zurück.
  • Der Benutzer speichert dieses Token in seinen Cookies, Mobilgeräten oder möglichen API-Servern, auf denen er es zur Anforderung von Anfragen verwendet.

Nochmals: Der obige Ablauf ist NICHT OAuth-kompatibel, aber es ist eine etwas einfachere Version, für die STILL Token verwendet.

Der Hauptpunkt hier ist, dass Token (JWTs) im Allgemeinen nützlich sind und nicht mit dem OAuth-Fluss gekoppelt werden müssen.

Mir ist klar, dass dies eine Textwand ist, aber hoffentlich beantwortet es Ihre Frage ausführlicher =)

112
rdegges

Wenn Sie eine Ressource von einem gesicherten Webdienst anfordern, können Sie für den Anruf ein Authentifizierungstoken angeben. Das Token fungiert als "Geheimcode" für den Zugriff auf die Ressource.

OAuth ist nur ein bestimmter Typ einer tokenbasierten Authentifizierungsmethode.

5
lipponen

OAuth ist eine Spezifikation für die Autorisierung, nicht für die Authentifizierung

OAuth 2.0 ist eine Spezifikation für die Autorisierung, jedoch NICHT für die Authentifizierung. RFC 6749, 3.1. Autorisierungsendpunkt sagt ausdrücklich wie folgt:

Der Autorisierungsendpunkt wird für die Interaktion mit dem Ressourcenbesitzer verwendet und erhalten Sie eine Bewilligung. Der Autorisierungsserver MUSS zuerst Überprüfen Sie die Identität des Ressourcenbesitzers. Die Art und Weise, in der die Der Autorisierungsserver authentifiziert den Ressourceneigentümer (z. B. Benutzername und Kennwortanmeldung, Sitzungscookies). jenseits des Geltungsbereichs Spezifikation.

Verwenden Sie OAuth nur, wenn Sie Ihrem apis Zugang zu einem Dienst eines Drittanbieters gewähren möchten. Selbst wenn Sie OAuth verwenden, benötigen Sie eine Authentifizierung (tokenbasiert oder sitzungsbasiert usw.), um die Verwendung zu authentifizieren. OAuth ist nicht für die Authentifizierung vorgesehen.

siehe diese frage .

0
nithin