Wie funktioniert die Cookie-basierte Authentifizierung?

209

Kann mir jemand Schritt für Schritt beschreiben, wie die Cookie-basierte Authentifizierung funktioniert? Ich habe noch nie etwas mit Authentifizierung oder Cookies gemacht. Was muss der Browser tun? Was muss der Server tun? In welcher Reihenfolge? Wie halten wir die Dinge sicher?

Ich habe über verschiedene Arten der Authentifizierung und über Cookies gelesen, möchte aber eine grundlegende Beschreibung der Verwendung der beiden zusammen. Ich habe nur gelesen, dass sie häufig zusammen verwendet werden, konnte jedoch keine Beschreibung der Verwendung finden.

Mastid
quelle

Antworten:

162

Ein Cookie ist im Grunde nur ein Element in einem Wörterbuch. Jeder Artikel hat einen Schlüssel und einen Wert. Für die Authentifizierung könnte der Schlüssel so etwas wie "Benutzername" sein und der Wert wäre der Benutzername. Jedes Mal, wenn Sie eine Anfrage an eine Website stellen, nimmt Ihr Browser die Cookies in die Anfrage auf, und der Host-Server überprüft die Cookies. Die Authentifizierung kann also automatisch so erfolgen.

Um ein Cookie zu setzen, müssen Sie es nur zu der Antwort hinzufügen, die der Server nach Anforderungen zurücksendet. Der Browser fügt das Cookie nach Erhalt der Antwort hinzu.

Es gibt verschiedene Optionen, die Sie für den Cookie-Server konfigurieren können, z. B. Ablaufzeiten oder Verschlüsselung. Ein verschlüsseltes Cookie wird häufig als signiertes Cookie bezeichnet. Grundsätzlich verschlüsselt der Server den Schlüssel und den Wert im Wörterbuchelement, sodass nur der Server die Informationen verwenden kann. Dann wäre der Cookie also sicher.

Ein Browser speichert die vom Server gesetzten Cookies. Im HTTP-Header jeder Anfrage, die der Browser an diesen Server stellt, werden die Cookies hinzugefügt. Es werden nur Cookies für die Domains hinzugefügt, die sie setzen. Example.com kann ein Cookie setzen und im HTTP-Header Optionen hinzufügen, mit denen die Browser das Cookie an Subdomains wie sub.example.com zurücksenden können. Es wäre nicht akzeptabel, wenn ein Browser jemals Cookies an eine andere Domain sendet.

Conor Patrick
quelle
Ich verstehe, dass der Browser das Cookie an dieselbe Domain zurücksenden kann. Berücksichtigt der Browser in diesem Zusammenhang die Subdomain, wenn zwischen zwei Domains unterschieden wird?
Aakash
1
Sie können im HTTP-Header Optionen festlegen, wie ein Browser mit Subdomains umgeht.
Conor Patrick
286

Mir ist klar, dass dies Jahre zu spät ist, aber ich dachte, ich könnte Conors Antwort erweitern und der Diskussion ein bisschen mehr hinzufügen.

Kann mir jemand Schritt für Schritt beschreiben, wie die Cookie-basierte Authentifizierung funktioniert? Ich habe noch nie etwas mit Authentifizierung oder Cookies gemacht. Was muss der Browser tun? Was muss der Server tun? In welcher Reihenfolge? Wie halten wir die Dinge sicher?

Schritt 1: Client> Anmelden

Vor allem muss sich der Benutzer anmelden. Der Client sendet eine HTTP-Anfrage an den Server, die seinen Benutzernamen und sein Kennwort enthält.

Schritt 2: Server> Behandlung Anmeldung

Der Server empfängt diese Anforderung und hasht das Kennwort, bevor er den Benutzernamen und das Kennwort in Ihrer Datenbank speichert. Auf diese Weise werden Personen, die Zugriff auf Ihre Datenbank erhalten, die tatsächlichen Kennwörter Ihrer Benutzer nicht angezeigt.

Schritt 3: Client> Benutzeranmeldung

Jetzt meldet sich Ihr Benutzer an. Er gibt seinen Benutzernamen / sein Passwort an und dies wird erneut als HTTP-Anfrage an den Server gesendet.

Schritt 4: Server> Anmeldung überprüfen

Der Server sucht den Benutzernamen in der Datenbank, hasht das angegebene Anmeldekennwort und vergleicht es mit dem zuvor gehashten Kennwort in der Datenbank. Wenn es nicht ausgecheckt wird, können wir ihnen den Zugriff verweigern, indem wir einen 401-Statuscode senden und die Anforderung beenden .

Schritt 5: Server> Zugriffstoken generieren

Wenn alles ausgecheckt ist, erstellen wir ein Zugriffstoken, das die Sitzung des Benutzers eindeutig identifiziert. Noch auf dem Server machen wir zwei Dinge mit dem Zugriffstoken:

  1. Speichern Sie es in der Datenbank, die diesem Benutzer zugeordnet ist
  2. Hängen Sie es an ein Antwort-Cookie an, das an den Client zurückgegeben werden soll. Stellen Sie sicher, dass Sie ein Ablaufdatum / eine Ablaufzeit festlegen, um die Sitzung des Benutzers einzuschränken

Von nun an werden die Cookies an jede Anfrage (und Antwort) zwischen Client und Server angehängt.

Schritt 6: Client> Seitenanforderungen stellen

Zurück auf der Clientseite sind wir jetzt angemeldet. Jedes Mal, wenn der Client eine Seite anfordert, für die eine Autorisierung erforderlich ist (dh sie müssen angemeldet sein), erhält der Server das Zugriffstoken aus dem Cookie und vergleicht es mit dem einen in der diesem Benutzer zugeordneten Datenbank. Wenn es auscheckt, wird der Zugriff gewährt.

Damit sollten Sie loslegen. Löschen Sie die Cookies unbedingt beim Abmelden!

pllx
quelle
10
Danke für die Beschreibung. Ich frage mich nur, wie Zugriffstoken Sicherheit bieten. Kann sich ein Angreifer, wenn er das Cookie stiehlt, als authentifizierter angemeldeter Benutzer ausgeben? Oder ist das durch SSL geschützt?
Richeek
6
@Richeek SSL sichert das Abfangen bei Anfragen / Antworten, aber ein Angreifer kann an den Endpunkten (z. B. Ihrem Browser) auf Ihre Cookies zugreifen. Theoretisch könnten sie sich dann als angemeldeter Benutzer ausgeben, bis das Cookie abläuft. Ich sage "theoretisch", weil die obige Implementierung das nicht behandelt. In der obigen Implementierung hat der Angreifer Zugriff, bis das Zugriffstoken in Ihrer Datenbank aktualisiert wird (dh die nächste Anmeldung).
pllx
14
Sie können das Zugriffstoken nach Ablauf selbst ungültig machen, möglicherweise mit einem „Ablaufdatum“ in Ihrer Datenbank. Sie können auch JSON-Web-Token (JWT) verwenden , die wie Zugriffstoken sind, aber unter anderem den Ablauf von Token verarbeiten können. Mehr zu JWT hier. Ein Angreifer hat für kurze Zeit weiterhin Zugriff auf Ihr Konto, wenn er über Ihr Zugriffstoken / JWT verfügt. Daher sollten Sie auch Ihre Endpunkte sichern.
pllx
3
Ich habe lange gebraucht, um mich zu bedanken! Vielen Dank für Ihre Erklärung
Richeek
4
@ManuChadha Sie können zusammen mit dem Token / Sitzungsschlüssel auch die IP-Adresse des Benutzers zusammen mit anderen identifizierenden Parametern wie User-Agent usw. speichern. Wenn die Anfrage dann mit einem gültigen Cookie kommt, aber von der falschen IP, dem falschen Browser usw., dann Sie Verweigern Sie die Anforderung und leiten Sie den Benutzer zur erneuten Authentifizierung auf die Anmeldeseite um.
FalcoGer
18

Cookie-basierte Authentifizierung

Die auf Cookies basierende Authentifizierung funktioniert normalerweise in diesen 4 Schritten:

  1. Der Benutzer gibt im Anmeldeformular einen Benutzernamen und ein Kennwort ein und klickt auf Anmelden.
  2. Nachdem die Anforderung gestellt wurde, überprüft der Server den Benutzer im Backend durch Abfragen in der Datenbank. Wenn die Anforderung gültig ist, wird eine Sitzung unter Verwendung der aus der Datenbank abgerufenen Benutzerinformationen erstellt und gespeichert. Für jede Sitzung wird eine eindeutige ID mit dem Namen Sitzungs-ID erstellt. Standardmäßig wird die Sitzungs-ID dem Client über den Browser übergeben.
  3. Der Browser sendet diese Sitzungs-ID bei jeder nachfolgenden Anforderung. Die Sitzungs-ID wird anhand der Datenbank überprüft. Basierend auf dieser Sitzungs-ID identifiziert die Website die Sitzung, die zu welchem ​​Client gehört, und gibt dann Zugriff auf die Anforderung.

  4. Sobald sich ein Benutzer von der App abmeldet, wird die Sitzung sowohl clientseitig als auch serverseitig zerstört.

Debendra Dash
quelle