Sitzungen sind eine beliebte Option für die Benutzerauthentifizierung im Internet. Eine Sitzung ist ein Zeitraum, in dem ein Benutzer aktiv mit einer Anwendung interagiert. Die Lebensdauer einer Sitzung beginnt, wenn sich ein Benutzer anmeldet, und endet, wenn er sich abmeldet.

HTTP ist ein zustandsloses Protokoll, daher müssen Sie die Benutzeraktivität häufig manuell verfolgen.

Auf der Serverseite Ihrer Anwendung können Sie einen eindeutigen Wert generieren, vorzugsweise einen kryptografisch sicheren. Sie können dies dann in einem Cookie speichern, das der Client bei zukünftigen Anfragen an Ihre App sendet, wodurch eine Form des Zustands erstellt wird.

Sitzungen in Go

Sie können das net/http-Paket verwenden, um Sitzungen zu implementieren, und es gibt viele verfügbare Pakete, die dies bereits tun. Am beliebtesten ist das Gorilla-Session-Paket. Dieses Paket bietet Cookie- und Dateispeicherfunktionen zusammen mit einer benutzerdefinierten Sitzungs-Backend-Infrastruktur.

Führen Sie diesen Befehl in Ihrem Go-Arbeitsbereich aus, um das Gorilla-Sitzungspaket zu installieren.

instagram viewer
gehen Holen Sie sich github.com/gorilla/sessions

In diesem Tutorial verwenden Sie einen Cookie-Speicher für Sitzungen. Sie verwenden das net/http-Paket, um einen Webserver zu starten, der das Problem des Benutzers überprüft und Sitzungen widerruft.

Hier ist die Liste der Importe, die Sie benötigen, um diesem Tutorial zu folgen.

importieren (
"github.com/gorilla/sessions"
"Protokoll"
"net/http"
)

Das Protokoll Das Paket ist für protokollierungsbezogene Vorgänge basierend auf dem Status der Benutzerauthentifizierung vorgesehen.

Eine einfache Cookie-Store-Implementierung

Sie benötigen einen Cookie-Speicher für Ihre Login- und Logout-Handler-Funktionen. Für Ihren Cookie-Speicher benötigen Sie einen geheimen Schlüssel zur Authentifizierung.

Hier ist eine Funktion für die Implementierung des Cookie-Speichers.

// Die cookieStore-Funktion erstellt einen Cookie-Speicher mit dem geheimen Schlüssel des Benutzers
FunkCookieStore() *Sitzungen.CookieStore {
Geheimschlüssel := []Byte("super-secret-SecretKey")
cookieStore := Sitzungen. NeuerCookieStore (SecretKey)

// Funktion gibt den Cookie-Speicher zurück, damit andere Funktionen darauf zugreifen können
Rückkehr CookieStore
}

In dem CookieStore Funktion, die deklarierte geheime Schlüsselvariable Geheimer Schlüssel ist ein Beispiel für einen geheimen Schlüssel. In der Produktion sollte Ihr geheimer Schlüssel kryptografisch sicher sein, zum Beispiel mit dem Crypto-Paket. Sie sollten auch das Geheimnis aus laden eine Umgebungsvariablendatei.

Die Funktion gibt einen Wert von zurück *Sitzungen. CookieStore -Typ, der den mit dem geheimen Schlüssel gesicherten Cookie-Speicher darstellt. Sie verwenden die CookieStore Funktion in Ihrem Anmeldung und Ausloggen Handler zum Authentifizieren von Benutzern und Zuweisen von Sitzungen.

Die Login-Handler-Funktion

Sie sollten überprüfen, ob der Benutzer bereits angemeldet ist, bevor Sie eine Sitzung in Ihrer Login-Handler-Funktion erstellen. Du kannst den... benutzen Erhalten -Methode im Cookie-Speicher, um eine Sitzung aus dem Cookie abzurufen und die Sitzung zur Anfrage des Clients hinzuzufügen.

Das Erhalten -Methode gibt die Sitzung und einen Fehler zurück, den Sie behandeln können. Wenn Sie den Benutzer authentifizieren müssen, können Sie ihn in authentifizieren oder autorisieren Anmeldung Handler.

// Login-Handler ruft die Sitzung aus dem Cookie-Speicher ab
FunkAnmeldung(Autor http. ResponseWriter, Anfrage *http. Anfrage) {
session, err := cookieStore().Get (request, "Cookie Name From Request")

wenn äh != Null {
Protokoll. Fatalln (äh)
}

// Legen Sie hier Ihre Benutzerauthentifizierung basierend auf der Operation fest
Sitzung. Werte["Authentifizierungsstatus"] = Stimmt
Fehler = Sitzung. Speichern (Anfrage, Autor)

wenn äh != Null {
Rückkehr
}
}

Die Values-Eigenschaft enthält die sitzungsbezogenen Daten im Cookie-Speicher:

Das Speichern -Methode speichert die Sitzung im Cookie-Speicher. In Ihren Handlern benötigen Sie andere Authentifizierungsmaßnahmen für eine höhere Sicherheit.

Überprüfen des Anmeldestatus eines Benutzers

Ihr Verifizierungs-Handler sollte die Sitzung aus dem Cookie des Clients mithilfe des Cookie-Speichers abrufen Erhalten Methode. Anschließend können Sie die Sitzung abrufen und den Benutzer authentifizieren.

FunkcheckAuthStatus(Autor http. ResponseWriter, Anfrage *http. Anfrage) {
session, err := cookieStore().Get (request, "Cookie Name From Request")

wenn äh != Null {
Protokoll. Fatalln (äh)
}

authentifizierte := Sitzung. Werte["Authentifizierungsstatus"]

wenn authentifiziert == Stimmt {
Schriftsteller. WriteHeader (http. StatusOK) // 200 Statuscode schreiben
Rückkehr
} anders {
Schriftsteller. WriteHeader (http. StatusBadRequest) // 400 HTTP-Statuscode schreiben
Rückkehr
}
}

Das authentifiziert Variable verwendet die Werte -Eigenschaft, um den Status aus dem Cookie-Speicher abzurufen. Die if-Anweisung überprüft dann diesen Authentifizierungsstatus. Wenn es sich auswertet Stimmterhält der Kunde die 200 HTTP-Statuscode. Wenn der Authentifizierungsstatus nicht wahr ist, erhält der Client den HTTP-Statuscode 400.

Der Session Logout Handler

Ihre Logout-Handler-Funktion ist der Login-Handler-Funktion sehr ähnlich. Sie werden alle Daten im Zusammenhang mit der Sitzung des Benutzers aus dem Cookie-Speicher löschen und den Authentifizierungsstatus annullieren.

FunkAusloggen(Autor http. ResponseWriter, Anfrage *http. Anfrage) {
session, err := cookieStore().Get (request, "Cookie Name From Request")

wenn äh != Null {
Rückkehr
}

// Annulliere die Sitzung des Benutzers aus dem Cookie Store
Sitzung. Werte["Authentifizierungsstatus"] = FALSCH
Fehler = Sitzung. Speichern (Anfrage, Autor)

wenn äh != Null {
Rückkehr
}
}

Das Ausloggen Die Handler-Funktion hebt den Sitzungsauthentifizierungsstatus des Benutzers auf und speichert den Status im Cookie-Speicher.

Speichern Sie keine sensiblen Daten in Sitzungen

Sitzungen eignen sich hervorragend zum Speichern von Daten, aber es ist am besten, das Speichern sensibler Daten darin zu vermeiden. Ein Angreifer kann eine Sitzung kapern, wenn Sie seine Daten in einem Cookie speichern und über einfaches HTTP senden. Die Sicherheit Ihrer App ist Ihren Benutzern wichtig.

Sitzungen sind zustandsbehaftet und es gibt viele Datenbankimplementierungen von Cookie-Speichern für das Gorilla-Paket, sowohl für SQL- als auch für NoSQL-Datenbanken.