Relace jsou oblíbenou možností ověřování uživatelů na webu. Relace je období, během kterého uživatel aktivně pracuje s aplikací. Životnost relace začíná, když se uživatel přihlásí, a končí, když se odhlásí.

HTTP je bezstavový protokol, takže často budete muset sledovat aktivitu uživatele ručně.

Na straně serveru vaší aplikace můžete vygenerovat jedinečnou hodnotu, nejlépe kryptograficky zabezpečenou. To pak můžete uložit do souboru cookie, který klient odešle do vaší aplikace na budoucí požadavky, čímž vytvoříte formu stavu.

Sessions in Go

K implementaci relací můžete použít balíček net/http a existuje mnoho dostupných balíčků, které to již dělají. Nejoblíbenější je balíček Gorilla sessions. Tento balíček poskytuje funkce pro ukládání souborů cookie a souborů spolu s vlastní infrastrukturou backend relace.

Spuštěním tohoto příkazu na pracovním prostoru Go nainstalujte balíček relací Gorilla.

jít získejte github.com/gorilla/sessions

V tomto tutoriálu budete pro relace používat úložiště souborů cookie. Balíček net/http použijete ke spuštění webového serveru, který zkontroluje problém uživatele a zruší relace.

instagram viewer

Zde je seznam importů, které budete potřebovat podle tohoto návodu.

import (
"github.com/gorilla/sessions"
"log"
"net/http"
)

The log balíček je pro operace související s protokolováním na základě stavu autentizace uživatele.

Jednoduchá implementace Cookie Store

Pro funkce obsluhy přihlášení a odhlášení budete potřebovat úložiště souborů cookie. Pro vaše úložiště souborů cookie budete potřebovat tajný klíč pro ověření.

Zde je funkce pro implementaci úložiště souborů cookie.

// funkce cookieStore vytvoří úložiště souborů cookie s tajným klíčem uživatele
funccookieStore() *sezení.CookieStore {
Tajný klíč := []byte("super-secret-SecretKey")
cookieStore := relace. NewCookieStore (SecretKey)

// funkce vrátí úložiště souborů cookie, aby k němu měly přístup další funkce
vrátit se cookieStore
}

V cookieStore funkce, deklarovaná tajná klíčová proměnná Tajný klíč je příkladem tajného klíče. Ve výrobě by měl být váš tajný klíč kryptograficky bezpečný, například pomocí kryptografického balíčku. Měli byste také načíst tajemství z soubor proměnných prostředí.

Funkce vrací hodnotu *relace. CookieStore typ, který představuje úložiště souborů cookie zabezpečené tajným klíčem. Budete používat CookieStore funkce ve vašem přihlásit se a odhlásit se handlery pro ověřování uživatelů a přiřazování relací.

Funkce obsluhy přihlášení

Před vytvořením relace ve funkci obsluhy přihlášení budete chtít ověřit, zda je uživatel již přihlášen. Můžete použít Dostat metoda v úložišti souborů cookie k načtení relace z cookie a přidání relace do požadavku klienta.

The Dostat metoda vrátí relaci a chybu, kterou můžete zvládnout. Pokud potřebujete ověřit uživatele, můžete se ověřit nebo autorizovat v přihlásit se psovod.

// obsluha přihlášení načte relaci z úložiště souborů cookie
funcpřihlásit se(spisovatel http. ResponseWriter, požadavek *http. Žádost) {
session, err := cookieStore().Get (požadavek, "Název souboru cookie z požadavku")

-li chyba!= nula {
log. Fatalln (chyba)
}

// zde nastavte autentizaci uživatele na základě operace
zasedání. Hodnoty["auth status"] = skutečný
err = relace. Uložit (žádost, pisatel)

-li chyba!= nula {
vrátit se
}
}

Vlastnost Values ​​uchovává data související s relací v úložišti souborů cookie:

The Uložit metoda uloží relaci do úložiště souborů cookie. Ve vašich obslužných nástrojích budete potřebovat další autentizační opatření pro vyšší zabezpečení.

Ověření stavu přihlášení uživatele

Váš ověřovací obslužný program by měl načíst relaci ze souboru cookie klienta pomocí úložiště souborů cookie Dostat metoda. Poté můžete relaci načíst a ověřit uživatele.

funccheckAuthStatus(spisovatel http. ResponseWriter, požadavek *http. Žádost) {
session, err := cookieStore().Get (požadavek, "Název souboru cookie z požadavku")

-li chyba!= nula {
log. Fatalln (chyba)
}

ověřeno := relace. Hodnoty["stav ověření"]

-li ověřeno == skutečný {
spisovatel. WriteHeader (http. Stav OK) // napište stavový kód 200
vrátit se
} jiný {
spisovatel. WriteHeader (http. StatusBadRequest) // napište stavový kód 400 http
vrátit se
}
}

The ověřené proměnná používá Hodnoty vlastnost k načtení stavu z úložiště souborů cookie. Příkaz if pak ověří tento stav autentizace. Pokud se to vyhodnotí skutečný, klient obdrží 200 Stavový kód HTTP. Pokud stav ověření není pravdivý, klient obdrží stavový kód HTTP 400.

Obslužný program pro odhlášení z relace

Vaše funkce obsluhy odhlášení bude velmi podobná funkci obsluhy přihlášení. Vymažete všechna data související s relací uživatele z úložiště souborů cookie a zrušíte stav ověření.

funcodhlásit se(spisovatel http. ResponseWriter, požadavek *http. Žádost) {
session, err := cookieStore().Get (požadavek, "Název souboru cookie z požadavku")

-li chyba!= nula {
vrátit se
}

// zruší relaci uživatele z úložiště souborů cookie
zasedání. Hodnoty["auth status"] = Nepravdivé
err = relace. Uložit (žádost, pisatel)

-li chyba!= nula {
vrátit se
}
}

The odhlásit se funkce handler zruší stav ověření relace uživatele a uloží stav do úložiště souborů cookie.

Neuchovávejte citlivá data v relacích

Relace jsou skvělé pro ukládání dat, ale je nejlepší se v nich vyhýbat ukládání citlivých dat. Útočník může unést relaci, pokud uložíte její data do cookie a odešlete je přes prostý HTTP. Bezpečnost vaší aplikace je pro vaše uživatele důležitá.

Relace jsou stavové a existuje mnoho databázových implementací úložišť souborů cookie pro balíček Gorilla, pro databáze SQL i NoSQL.