Was ist eine tokenbasierte Authentifizierung?

Antworten:

543

Ich denke , es ist gut erklärt hier - unter Angabe nur die wichtigsten Sätze des langen Artikels:

Das allgemeine Konzept eines tokenbasierten Authentifizierungssystems ist einfach. Ermöglichen Sie Benutzern die Eingabe ihres Benutzernamens und Kennworts, um ein Token zu erhalten, mit dem sie eine bestimmte Ressource abrufen können - ohne ihren Benutzernamen und ihr Kennwort zu verwenden. Sobald das Token erhalten wurde, kann der Benutzer das Token, das für einen bestimmten Zeitraum Zugriff auf eine bestimmte Ressource bietet, dem Remote-Standort anbieten.

Mit anderen Worten: Fügen Sie eine Indirektionsebene für die Authentifizierung hinzu. Anstatt sich für jede geschützte Ressource mit Benutzername und Kennwort authentifizieren zu müssen, authentifiziert sich der Benutzer auf diese Weise einmal (innerhalb einer Sitzung von begrenzter Dauer) und erhält dafür ein zeitlich begrenztes Token und verwendet dieses Token für die weitere Authentifizierung während der Sitzung.

Es gibt viele Vorteile - z. B. könnte der Benutzer das Token, sobald er es erhalten hat, an ein anderes automatisiertes System weitergeben, dem er für eine begrenzte Zeit und eine begrenzte Anzahl von Ressourcen vertrauen möchte, das er jedoch nicht bereit wäre Vertrauen in ihren Benutzernamen und ihr Passwort (dh mit jeder Ressource, auf die sie zugreifen dürfen, für immer oder zumindest bis sie ihr Passwort ändern).

Wenn noch etwas unklar ist, bearbeiten Sie bitte Ihre Frage, um zu klären, WAS Ihnen nicht 100% klar ist, und ich bin sicher, wir können Ihnen weiterhelfen.

Alex Martelli
quelle
6
Habe ich Recht, wenn ich denke, dass in einer Webanwendung ein (oder mehrere) Cookies von der Remote-Website die Funktion des Tokens erfüllen?
AJP
29
Wenn Token als Cookies gespeichert werden, gibt es irgendetwas, das eine Person davon abhält, dieses Cookie / Token zu stehlen und es selbst zu verwenden, und den Server dazu bringt, sich als autorisierten Benutzer auszugeben? Natürlich konnten sie es nur x Mal benutzen, aber während dieser Zeit konnten sie den ganzen Schaden anrichten, den sie brauchten.
BenM
40
Wie unterscheidet sich dies von SessionAuthentication, bei der der Benutzer eine Sitzungs-ID erhalten kann, indem er seinen Benutzernamen und sein Kennwort eingibt und diese Sitzungs-ID dann in einer nachfolgenden Anforderung verwendet?
Saurabh Verma
4
Wenn das Token abläuft, muss sich der Benutzer erneut anmelden, um ein neues Token zu erhalten?
Anthony bis
12
@SaurabhVerma unterscheidet sich von einer Sitzung, da Sie die Informationen nicht in einem Cookie speichern müssen. Dies ist ideal für mobile Geräte, von denen einige Einschränkungen bei der Verwendung von Cookies aufweisen.
Kebman
182

Von Auth0.com

Die Token-basierte Authentifizierung basiert auf einem signierten Token, das bei jeder Anforderung an den Server gesendet wird.

Was sind die Vorteile eines tokenbasierten Ansatzes?

  • Domänenübergreifend / CORS: Cookies + CORS spielen in verschiedenen Domänen nicht gut. Mit einem tokenbasierten Ansatz können Sie AJAX-Aufrufe an jeden Server in jeder Domäne tätigen, da Sie einen HTTP-Header zum Übertragen der Benutzerinformationen verwenden.

  • Statuslos (auch als serverseitige Skalierbarkeit bezeichnet): Es ist nicht erforderlich, einen Sitzungsspeicher zu führen. Das Token ist eine in sich geschlossene Entität, die alle Benutzerinformationen übermittelt. Der Rest des Staates lebt in Cookies oder lokalem Speicher auf der Client-Seite.

  • CDN: Sie können alle Assets Ihrer App von einem CDN aus bereitstellen (z. B. Javascript, HTML, Bilder usw.), und Ihre Serverseite ist nur die API.

  • Entkopplung: Sie sind nicht an ein bestimmtes Authentifizierungsschema gebunden. Das Token kann überall generiert werden, daher kann Ihre API von überall mit einer einzigen Methode zur Authentifizierung dieser Aufrufe aufgerufen werden.

  • Mobil bereit: Wenn Sie mit der Arbeit auf einer nativen Plattform (iOS, Android, Windows 8 usw.) beginnen, sind Cookies nicht ideal, wenn Sie einen tokenbasierten Ansatz verwenden, der dies erheblich vereinfacht.

  • CSRF: Da Sie sich nicht auf Cookies verlassen, müssen Sie sich nicht vor standortübergreifenden Anforderungen schützen (z. B. wäre es nicht möglich, Ihre Website zu überwachen, eine POST-Anforderung zu generieren und das vorhandene Authentifizierungscookie erneut zu verwenden, da keine vorhanden sind ).

  • Leistung: Wir präsentieren hier keine harten Leistungsbenchmarks, aber ein Netzwerk-Roundtrip (z. B. das Auffinden einer Sitzung in einer Datenbank) dauert wahrscheinlich länger als die Berechnung eines HMACSHA256, um ein Token zu validieren und seinen Inhalt zu analysieren.

Asik
quelle
6
@Asik Alle Punkte hier sind gültig, außer "Statuslos", wenn Sie anfangen, sich mit Token-Widerruf, Blacklisting, Verhinderung von Antwortangriffen usw. zu
befassen
Die zitierte Seite empfiehlt einen neueren Artikel zum gleichen Thema: auth0.com/blog/cookies-vs-tokens-definitive-guide
ASalazar
2
Vielleicht möchten Sie lesen "JWT nicht mehr für Sitzungen verwenden": cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-for-sessions
Juraj Martinka
1
Asik, wie wäre es mit der Gültigkeit des Tokens und wann es abgelaufen wäre? Wenn Sie diese Informationen hinzufügen, wäre es gut.
Arun Prakash
2
Link ist jetzt unterbrochen.
Elliptische Ansicht
95

A tokenist ein Datenelement, das Server Xmöglicherweise nur erstellt werden konnte und das genügend Daten enthält, um einen bestimmten Benutzer zu identifizieren.

Sie können Ihre Anmeldeinformationen präsentieren und Server Xnach einem fragen token; und dann können Sie Ihre präsentieren tokenund um Server Xeine benutzerspezifische Aktion bitten .

Tokens werden unter Verwendung verschiedener Kombinationen verschiedener Techniken aus dem Bereich der Kryptographie sowie mit Beiträgen aus dem breiteren Bereich der Sicherheitsforschung erstellt. Wenn Sie sich entscheiden, Ihr eigenes tokenSystem zu erstellen , sollten Sie am besten wirklich schlau sein.

Yfeldblum
quelle
4
Wenn Sie eine tokenbasierte Authentifizierung wünschen, sollten Sie im Allgemeinen mit OAuth beginnen.
Bob Aman
6
OAuth ist in einer webbasierten Anwendung durchaus realisierbar. Beispielsweise verwenden Anmeldesitzungen für Betriebssysteme ebenso wie viele andere Arten von Softwareprogrammen Tokensysteme, sodass diese Idee nicht auf das Web beschränkt ist.
Yfeldblum
1
Ein Token ist wahrscheinlich auch für ein nicht öffentliches Kundensupport-System vorzuziehen. Das Unternehmen kontrolliert den Benutzernamen / das Passwort und gibt das Token aus und kontrolliert es.
KevinManx
chrs - aber wie unterscheidet sich dieses System von einem sitzungsbasierten System?
BKSpurgeon
@BKSpurgeon - Token sind eine gängige Methode zum Implementieren authentifizierter Sitzungen.
Yfeldblum
40

Ein Token ist ein vom Server erstelltes Datenelement und enthält Informationen zur Identifizierung eines bestimmten Benutzers und zur Gültigkeit des Tokens. Das Token enthält die Informationen des Benutzers sowie einen speziellen Token-Code, den der Benutzer mit jeder Methode, die die Authentifizierung unterstützt, an den Server übergeben kann, anstatt einen Benutzernamen und ein Kennwort direkt zu übergeben.

Die Token-basierte Authentifizierung ist eine Sicherheitstechnik, mit der Benutzer, die versuchen, sich bei einem Server, einem Netzwerk oder einem anderen sicheren System anzumelden, mithilfe eines vom Server bereitgestellten Sicherheitstokens authentifiziert werden.

Eine Authentifizierung ist erfolgreich, wenn ein Benutzer einem Server durch Übergeben eines Sicherheitstokens nachweisen kann, dass er ein gültiger Benutzer ist. Der Dienst überprüft das Sicherheitstoken und verarbeitet die Benutzeranforderung.

Nachdem das Token vom Dienst validiert wurde, wird es verwendet, um den Sicherheitskontext für den Client einzurichten, sodass der Dienst Autorisierungsentscheidungen treffen oder Aktivitäten für aufeinanderfolgende Benutzeranforderungen überwachen kann.

Besuchen Sie die Quelle

DeepakK
quelle
22

Token-basiert (Sicherheit / Authentifizierung)

bedeutet, dass wir zuerst den Token erhalten müssen, um zu beweisen, dass wir Zugriff haben. In einem realen Szenario könnte der Token eine Zugangskarte zum Gebäude sein, er könnte der Schlüssel zum Schloss Ihres Hauses sein. Damit Sie eine Schlüsselkarte für Ihr Büro oder den Schlüssel für Ihr Zuhause abrufen können, müssen Sie zunächst nachweisen, wer Sie sind und dass Sie tatsächlich Zugriff auf dieses Token haben. Es könnte so einfach sein, jemandem Ihre ID zu zeigen oder ihm ein geheimes Passwort zu geben. Stellen Sie sich vor, ich muss Zugang zu meinem Büro bekommen. Ich gehe zum Sicherheitsbüro, zeige ihnen meinen Ausweis und sie geben mir diesen Token, der mich in das Gebäude lässt. Jetzt habe ich uneingeschränkten Zugang, um im Gebäude zu tun, was ich will, solange ich meinen Token bei mir habe.

Was ist der Vorteil der tokenbasierten Sicherheit?

Wenn wir an die unsichere API zurückdenken, mussten wir in diesem Fall unser Passwort für alles angeben, was wir tun wollten.

VorstellenJedes Mal, wenn wir eine Tür in unserem Büro betreten, müssen wir jedem, der neben der Tür sitzt, unser Passwort geben. Das wäre ziemlich schlimm, denn das bedeutet, dass jeder in unserem Büro unser Passwort nehmen und sich als wir ausgeben könnte, und das ist ziemlich schlimm. Stattdessen rufen wir das Token natürlich zusammen mit dem Passwort ab, aber wir rufen es von einer Person ab. Und dann können wir diesen Token überall im Gebäude verwenden. Wenn wir das Token verlieren, haben wir natürlich das gleiche Problem, als ob jemand anderes unser Passwort kennt, aber das führt uns zu Dingen wie, wie wir sicherstellen können, dass wir den Zugriff und möglicherweise das Token widerrufen können, wenn wir das Token verlieren sollte nicht länger als 24 Stunden leben, also müssen wir am nächsten Tag, an dem wir ins Büro kommen, unseren Ausweis erneut vorzeigen. Trotzdem gibt es nur eine Person, der wir den Ausweis zeigen.

Ahmer Ali Ahsan
quelle
15

Die Frage ist alt und die Technologie hat sich weiterentwickelt, hier ist der aktuelle Stand:

JSON Web Token (JWT) ist ein JSON-basierter offener Standard (RFC 7519) für die Weitergabe von Ansprüchen zwischen Parteien in einer Webanwendungsumgebung. Die Token sind kompakt, URL-sicher und können insbesondere im SSO-Kontext (Single Sign-On) des Webbrowsers verwendet werden.

https://en.wikipedia.org/wiki/JSON_Web_Token

Ray Hulha
quelle
1
Ich glaube nicht, dass JWT den aktuellen Stand der Technik für die Implementierung der tokenbasierten Authentifizierung darstellt. Es ist nur eine Möglichkeit, es umzusetzen, und mit vielen Fehlern, die Artikel wie cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-for-sessions
Sung Cho
3

Es ist nur ein Hash, der dem Benutzer in der Datenbank oder auf andere Weise zugeordnet ist. Dieses Token kann verwendet werden, um einen Benutzerzugriff auf den Inhalt der Anwendung zu authentifizieren und dann zu autorisieren. Um dieses Token auf der Clientseite abzurufen, ist eine Anmeldung erforderlich. Nach der ersten Anmeldung müssen Sie das abgerufene Token speichern, keine anderen Daten wie Sitzung, Sitzungs-ID, da hier alles Token ist, um auf andere Ressourcen der Anwendung zuzugreifen.

Token wird verwendet, um die Authentizität des Benutzers sicherzustellen.

Hardik Patel
quelle
3

Der heutzutage am meisten bevorzugte Ansatz zum Sichern der Web-API-Ressourcen ist die Authentifizierung der Benutzer im Web-API-Server mithilfe des signierten Tokens (das genügend Informationen enthält, um einen bestimmten Benutzer zu identifizieren), das vom Client mit jedem und an den Server gesendet werden muss jede Anfrage. Dies wird als Token-basierter Authentifizierungsansatz bezeichnet.

Die Token-basierte Authentifizierung funktioniert wie folgt:

Ein Benutzer gibt den Namen und das Kennwort in den Client ein (Client bezeichnet den Browser oder mobile Geräte usw.).

Der Client sendet diese Anmeldeinformationen (dh Benutzername und Kennwort) an den Autorisierungsserver.

Anschließend authentifiziert der Autorisierungsserver die Client-Anmeldeinformationen (dh Benutzername und Kennwort) und generiert anschließend ein Zugriffstoken und gibt es zurück. Dieses Zugriffstoken enthält genügend Informationen, um einen Benutzer zu identifizieren, und enthält auch die Ablaufzeit des Tokens.

Die Clientanwendung enthält dann das Zugriffstoken im Autorisierungsheader der HTTP-Anforderung, um auf die eingeschränkten Ressourcen vom Ressourcenserver zuzugreifen, bis das Token abgelaufen ist.

Der folgende Artikel zeigt Schritt für Schritt, wie die Token-basierte Authentifizierung in der WEB-API implementiert wird.

https://dotnettutorials.net/lesson/token-based-authentication-web-api/

Pranaya Rout
quelle
-2

Wenn Sie sich für eine neue Website registrieren, erhalten Sie häufig eine E-Mail, um Ihr Konto zu aktivieren. Diese E-Mail enthält normalerweise einen Link zum Klicken. Ein Teil dieses Links enthält ein Token. Der Server kennt dieses Token und kann es Ihrem Konto zuordnen. Dem Token ist normalerweise ein Ablaufdatum zugeordnet, sodass Sie möglicherweise nur eine Stunde Zeit haben, um auf den Link zu klicken und Ihr Konto zu aktivieren. All dies wäre mit Cookies oder Sitzungsvariablen nicht möglich, da nicht bekannt ist, mit welchem ​​Gerät oder Browser der Kunde E-Mails abruft.

user3094826
quelle
11
Einmaliges Token / Link ist ein anderes Konzept als die tokenbasierte Authentifizierung.
Emile Bergeron
Der Name dessen, was Sie sagen, ist auch Token. Aber das ist nicht die Frage
Sajjad Josefi