TL; DR
Wenn Sie sehr einfache Szenarien haben, wie eine einzelne Clientanwendung, eine einzelne API, zahlt es sich möglicherweise nicht aus, OAuth 2.0 zu verwenden, andererseits viele verschiedene Clients (browserbasiert, nativ mobil, serverseitig) Wenn Sie sich dann an die OAuth 2.0-Regeln halten, ist dies möglicherweise einfacher zu handhaben als der Versuch, Ihr eigenes System zu rollen.
Wie in einer anderen Antwort angegeben, ist JWT ( Learn JSON Web Tokens ) nur ein Token-Format. Es definiert einen kompakten und in sich geschlossenen Mechanismus für die Übertragung von Daten zwischen Parteien auf eine Weise, die überprüft und vertrauenswürdig ist, da sie digital signiert sind. Darüber hinaus machen die Codierungsregeln eines JWT die Verwendung dieser Token im Kontext von HTTP sehr einfach.
Da sie in sich geschlossen sind (das eigentliche Token enthält Informationen zu einem bestimmten Thema), sind sie auch eine gute Wahl für die Implementierung zustandsloser Authentifizierungsmechanismen (auch bekannt als Look mum, keine Sitzungen! ). Wenn Sie diesen Weg gehen und das einzige, was eine Partei vorlegen muss, um Zugriff auf eine geschützte Ressource zu erhalten, ist das Token selbst. Das betreffende Token kann als Inhaber-Token bezeichnet werden.
In der Praxis kann das, was Sie tun, bereits als auf Inhaber-Token basierend klassifiziert werden. Beachten Sie jedoch, dass Sie keine Inhaber-Token verwenden, wie in den OAuth 2.0-Spezifikationen angegeben (siehe RFC 6750 ). Dies würde bedeuten, sich auf den Authorization
HTTP-Header zu verlassen und das Bearer
Authentifizierungsschema zu verwenden.
In Bezug auf die Verwendung des JWT zur Verhinderung von CSRF ohne genaue Details ist es schwierig, die Gültigkeit dieser Praxis festzustellen, aber um ehrlich zu sein, scheint sie nicht korrekt und / oder sinnvoll zu sein. Der folgende Artikel ( Cookies vs Tokens: The Definitive Guide ) kann eine nützliche Lektüre zu diesem Thema sein, insbesondere der Abschnitt XSS- und XSRF-Schutz .
Ein letzter Ratschlag, auch wenn Sie nicht OAuth 2.0 vollständig ausführen müssen, würdeAuthorization
ich dringend empfehlen, Ihr Zugriffstoken innerhalb des Headers zu übergeben, anstatt benutzerdefinierte Header zu verwenden . Wenn es sich wirklich um Inhaber-Token handelt, befolgen Sie die Regeln von RFC 6750. Wenn nicht, können Sie jederzeit ein benutzerdefiniertes Authentifizierungsschema erstellen und diesen Header weiterhin verwenden.
Autorisierungsheader werden von HTTP-Proxys und -Servern erkannt und speziell behandelt. Daher verringert die Verwendung solcher Header zum Senden von Zugriffstoken an Ressourcenserver die Wahrscheinlichkeit eines Verlusts oder einer unbeabsichtigten Speicherung authentifizierter Anforderungen im Allgemeinen und insbesondere von Autorisierungsheadern.
(Quelle: RFC 6819, Abschnitt 5.4.1 )
OAuth 2.0 definiert ein Protokoll, dh es wird festgelegt, wie Token übertragen werden. JWT definiert ein Token-Format.
OAuth 2.0 und "JWT-Authentifizierung" haben ein ähnliches Erscheinungsbild, wenn es um die (2.) Phase geht, in der der Client das Token dem Ressourcenserver präsentiert: Das Token wird in einem Header übergeben.
"JWT-Authentifizierung" ist jedoch kein Standard und gibt nicht an, wie der Client das Token überhaupt erhält (erste Stufe). Das ist , wo die empfundene Komplexität von OAuth kommt: es definiert auch verschiedene Möglichkeiten , in denen der Kunde kann erhalten einen Zugriff von etwas Token , das einen Autorisierungs - Server aufgerufen wird.
Der wirkliche Unterschied besteht also darin, dass JWT nur ein Token-Format ist, OAuth 2.0 ein Protokoll (das möglicherweise ein JWT als Token-Format verwendet).
quelle
Zunächst müssen wir JWT und OAuth unterscheiden. Grundsätzlich ist JWT ein Token-Format. OAuth ist ein Autorisierungsprotokoll, das JWT als Token verwenden kann. OAuth verwendet serverseitigen und clientseitigen Speicher. Wenn Sie sich wirklich abmelden möchten, müssen Sie sich für OAuth2 entscheiden. Die Authentifizierung mit dem JWT-Token kann tatsächlich nicht abgemeldet werden. Weil Sie keinen Authentifizierungsserver haben, der Token verfolgt. Wenn Sie Clients von Drittanbietern eine API bereitstellen möchten, müssen Sie auch OAuth2 verwenden. OAuth2 ist sehr flexibel. Die Implementierung von JWT ist sehr einfach und dauert nicht lange. Wenn Ihre Anwendung diese Flexibilität benötigt, sollten Sie sich für OAuth2 entscheiden. Wenn Sie dieses Anwendungsszenario jedoch nicht benötigen, ist die Implementierung von OAuth2 Zeitverschwendung.
Das XSRF-Token wird in jedem Antwortheader immer an den Client gesendet. Es spielt keine Rolle, ob ein CSRF-Token in einem JWT-Token gesendet wird oder nicht, da das CSRF-Token mit sich selbst gesichert ist. Daher ist das Senden eines CSRF-Tokens in JWT nicht erforderlich.
quelle
JWT (JSON Web Tokens) - Dies ist nur ein Token-Format. JWT-Token sind JSON-codierte Datenstrukturen, die Informationen zu Aussteller, Betreff (Ansprüche), Ablaufzeit usw. enthalten. Sie sind für Manipulationssicherheit und Authentizität signiert und können zum Schutz der Token-Informationen mithilfe eines symmetrischen oder asymmetrischen Ansatzes verschlüsselt werden. JWT ist einfacher als SAML 1.1 / 2.0 und wird von allen Geräten unterstützt. Es ist leistungsfähiger als SWT (Simple Web Token).
OAuth2 - OAuth2 löst ein Problem, bei dem Benutzer mithilfe von Client-Software wie durchsuchbasierten Web-Apps, nativen mobilen Apps oder Desktop-Apps auf die Daten zugreifen möchten. OAuth2 dient nur zur Autorisierung. Client-Software kann autorisiert werden, im Namen des Endbenutzers mithilfe des Zugriffstokens auf die Ressourcen zuzugreifen.
OpenID Connect - OpenID Connect baut auf OAuth2 auf und fügt Authentifizierung hinzu. OpenID Connect fügt OAuth2 einige Einschränkungen hinzu, z. B. UserInfo-Endpunkt, ID-Token, Erkennung und dynamische Registrierung von OpenID Connect-Anbietern und Sitzungsverwaltung. JWT ist das obligatorische Format für das Token.
CSRF-Schutz - Sie müssen den CSRF-Schutz nicht implementieren, wenn Sie kein Token im Cookie des Browsers speichern.
Weitere Informationen finden Sie hier http://proficientblog.com/microservices-security/
quelle
Es sieht so aus, als hätten alle, die hier geantwortet haben, den Streitpunkt von OAUTH verpasst
Aus Wikipedia
Der entscheidende Punkt hier ist
access delegation
. Warum sollte jemand OAUTH erstellen, wenn es eine id / pwd-basierte Authentifizierung gibt, die durch multifaktorierte Authentifizierung wie OTPs unterstützt wird und außerdem durch JWTs gesichert werden kann, die verwendet werden, um den Zugriff auf die Pfade (wie Bereiche in OAUTH) zu sichern und den Ablauf der festzulegen ZugriffEs macht keinen Sinn, OAUTH zu verwenden, wenn Verbraucher nur über ihre vertrauenswürdigen Websites (oder Apps) auf ihre Ressourcen (Ihre Endpunkte) zugreifen, die wiederum auf Ihren Endpunkten gehostet werden
Sie können die OAUTH-Authentifizierung nur dann durchführen, wenn Sie eine
OAUTH provider
Person sind, wenn die Ressourcenbesitzer (Benutzer) über einen Drittanbieter-Client (externe App) auf ihre (Ihre) Ressourcen (Endpunkte) zugreifen möchten. Und es ist genau für den gleichen Zweck erstellt, obwohl Sie es im Allgemeinen missbrauchen könnenEin weiterer wichtiger Hinweis:
Sie verwenden das Wort
authentication
für JWT und OAUTH frei, bieten jedoch keinen Authentifizierungsmechanismus an. Ja, einer ist ein Token-Mechanismus und der andere ist ein Protokoll, aber nach der Authentifizierung werden sie nur zur Autorisierung (Zugriffsverwaltung) verwendet. Sie müssen OAUTH entweder mit der Authentifizierung vom Typ OPENID oder Ihren eigenen Client-Anmeldeinformationen sichernquelle
Finden Sie die Hauptunterschiede zwischen JWT und OAuth
OAuth 2.0 definiert ein Protokoll und JWT definiert ein Token-Format.
OAuth kann entweder JWT als Token-Format oder ein Zugriffstoken verwenden, das ein Inhaber-Token ist.
OpenID Connect verwendet meistens JWT als Token-Format.
quelle
JWT ist ein offener Standard, der eine kompakte und in sich geschlossene Methode für die sichere Übertragung von Informationen zwischen Parteien definiert. Es handelt sich um ein Authentifizierungsprotokoll, bei dem verschlüsselte Ansprüche (Token) zwischen zwei Parteien (Client und Server) übertragen werden können und das Token bei der Identifizierung eines Clients ausgestellt wird. Bei jeder nachfolgenden Anfrage senden wir den Token.
Während OAuth2 ein Autorisierungsframework ist, in dem allgemeine Verfahren und Setups durch das Framework definiert sind. JWT kann als Mechanismus in OAuth2 verwendet werden.
Mehr dazu lesen Sie hier
OAuth oder JWT? Welches und warum?
quelle
Die Frage ist häufig, aber nicht ganz sinnvoll. JWT ist eine Art Token, und OAuth ist ein Framework, das beschreibt, wie Token ausgegeben werden.
Was meinen wir mit "Framework"? Nur die Reihenfolge der Anfragen und Antworten und die Formate dieser, die zum Anfordern von Token verwendet werden können und sollten. OAuthv2 beschreibt separate "Flows" oder Grant-Typen für verschiedene Szenarien und verfügt über verschiedene Erweiterungen (wie PKCE), um die Sicherheit bestimmter Flows zu erweitern.
Das Ergebnis einer Tokenanforderung über eine OAuthV2-Bewilligung ist ... ein Token. Dieses Ding wird dann als "Inhaber-Token" verwendet, was bedeutet, dass jede Partei, die das Token besitzt, es vorlegen kann, wenn sie eine API-Serviceanfrage stellt (z. B. "Wie hoch ist der Kontostand auf meiner gespeicherten Wertkarte?"). Als Inhaber-Token funktioniert es wie Bargeld. Wenn Sie es halten, können Sie es verwenden. (Im Gegensatz zu Bargeld ist ein Token nicht das Verwenden und Verlieren. Vielleicht ist eine bessere Analogie eine Ganztageskarte für die Fahrt mit öffentlichen Verkehrsmitteln oder eine Ganztageskarte für Disneyworld.)
JWT ist eine bestimmte Art von Token, und JWT kann absolut als OAuth Bearer-Token verwendet werden. In der Tat ist dies die gängigste Praxis. Vor diesem Hintergrund ist "JWT vs OAuth" ein Vergleich von Äpfeln und Apfelkarren.
Oft denken die Leute, dass "OAuth-Token" immer ein undurchsichtiges Token impliziert - eine zufällige Folge von alphanumerischen Zeichen, die keine inhärente Bedeutung enthält -, die von einer OAuth-Token-Apotheke gewährt wird und die dann nur von demselben OAuth-Apothekensystem validiert werden kann. Dies ist jedoch nicht die einzige Art von OAuth-Token. Ein undurchsichtiger Token ist eine Art von Token. JWT kann als eine andere Art von OAuth-Token verwendet werden.
JWT sind dagegen nicht undurchsichtig. Das JWT ist kein "Zeiger" oder Verweis auf Informationen. Es enthält tatsächlich viele spezifische Informationen, die von jeder Partei, die über das Token verfügt, extrahiert und interpretiert werden können. Da die JWT echte Informationen enthält, kann eine JWT groß sein. 300 Bytes, 500 Bytes oder mehr, abhängig von den darin enthaltenen Ansprüchen und dem zum Signieren verwendeten Algorithmus. Wenn Leute sagen "JWT validieren sich selbst", bedeutet dies, dass jeder Inhaber des JWT es öffnen, validieren und dann Autorisierungsentscheidungen auf der Grundlage der darin dargestellten Ansprüche treffen kann. Das Validieren des JWT bedeutet: Überprüfen seiner Struktur, Decodieren der Base64-Codierung, Überprüfen des korrekten Schlüssels, Überprüfen der Signatur und anschließendes Überprüfen der erforderlichen Ansprüche im Token, Überprüfen des Ablaufs. Es ist keine einfache Sache, Eher ein mehrstufiger Prozess, aber natürlich gibt es viele Bibliotheken in verschiedenen Programmiersprachen, die damit zu tun haben, und natürlich gibt es die VerifyJWT-Richtlinie, die Ihnen dabei hilft, dies innerhalb eines Apigee Edge API-Proxys zu tun. Der Punkt ist, dass jeder Inhaber oder Empfänger einen Token verifizieren kann. Aus diesem Grund sagen wir, dass JWT "Federation" unterstützt - jeder kann ein Token generieren und jeder kann ein Token lesen und validieren.
kundenspezifische Ansprüche. Sowohl JWT- als auch undurchsichtige OAuth-Token können benutzerdefinierte Ansprüche zu diesem Thema enthalten. Sicherheit. Beide sind Inhaber-Token. Beide müssen als Geheimnisse geschützt werden. Ablauf. Beide können mit einem Ablauf markiert werden. Beide können aktualisiert werden. Der Authentifizierungsmechanismus oder die Erfahrung. Beide können dieselbe Benutzererfahrung bieten.
quelle
Jwt ist ein strenger Satz von Anweisungen zum Ausstellen und Validieren von signierten Zugriffstoken. Die Token enthalten Ansprüche, die von einer App verwendet werden, um den Zugriff auf einen Benutzer zu beschränken
OAuth2 hingegen ist kein Protokoll, sondern ein delegiertes Autorisierungsframework. Denken Sie an eine sehr detaillierte Richtlinie, mit der Benutzer und Anwendungen bestimmte Berechtigungen für andere Anwendungen sowohl in privaten als auch in öffentlichen Umgebungen autorisieren können. OpenID Connect, das sich über OAUTH2 befindet, bietet Ihnen Authentifizierung und Autorisierung. Es beschreibt, wie sich mehrere verschiedene Rollen, Benutzer in Ihrem System, serverseitige Apps wie eine API und Clients wie Websites oder native mobile Apps bei jedem anderen authentifizieren können
quelle