Relácie sú obľúbenou možnosťou overovania používateľov na webe. Relácia je obdobie, počas ktorého používateľ aktívne pracuje s aplikáciou. Životnosť relácie začína, keď sa používateľ prihlási, a končí, keď sa odhlási.

HTTP je bezstavový protokol, takže aktivitu používateľov budete často musieť sledovať manuálne.

Na strane servera vašej aplikácie môžete vygenerovať jedinečnú hodnotu, najlepšie kryptograficky zabezpečenú. Potom to môžete uložiť do súboru cookie, ktorý klient pošle do vašej aplikácie pri budúcich požiadavkách, čím vytvoríte formu stavu.

Relácie v službe Go

Na implementáciu relácií môžete použiť balík net/http a existuje veľa dostupných balíkov, ktoré to už robia. Najpopulárnejší je balíček Gorila sessions. Tento balík poskytuje funkcie ukladania súborov cookie a súborov spolu s vlastnou infraštruktúrou backendu relácie.

Spustite tento príkaz na pracovnom priestore Go a nainštalujte balík relácií Gorilla.

ísť získajte github.com/gorilla/sessions

V tomto návode budete na relácie používať úložisko súborov cookie. Balík net/http použijete na spustenie webového servera, ktorý skontroluje problém používateľa a zruší relácie.

instagram viewer

Tu je zoznam importov, ktoré budete potrebovať podľa tohto návodu.

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

The log balík je určený na operácie súvisiace s protokolovaním na základe stavu autentifikácie používateľa.

Jednoduchá implementácia Cookie Store

Pre funkcie obsluhy prihlásenia a odhlásenia budete potrebovať úložisko súborov cookie. Pre váš obchod so súbormi cookie budete potrebovať tajný kľúč na overenie.

Tu je funkcia na implementáciu úložiska súborov cookie.

// funkcia cookieStore vytvorí úložisko súborov cookie s tajným kľúčom používateľa
funccookieStore() *relácií.CookieStore {
Tajný kľúč := []byte("super-secret-SecretKey")
cookieStore := relácie. NewCookieStore (SecretKey)

// funkcia vráti ukladací priestor cookie, aby k nemu mali prístup iné funkcie
vrátiť cookieStore
}

V cookieStore funkcia, deklarovaná tajná kľúčová premenná SecretKey je príklad tajného kľúča. Vo výrobe by mal byť váš tajný kľúč kryptograficky bezpečný, napríklad pomocou kryptobalíka. Tajomstvo by ste mali načítať aj z súbor premenných prostredia.

Funkcia vráti hodnotu *relácie. CookieStore typ, ktorý predstavuje úložisko súborov cookie zabezpečené tajným kľúčom. Budete používať CookieStore funkciu vo vašom Prihlásiť sa a odhlásiť sa manipulátory na autentifikáciu používateľov a priraďovanie relácií.

Funkcia obsluhy prihlásenia

Pred vytvorením relácie vo funkcii obsluhy prihlásenia si budete chcieť overiť, či je používateľ už prihlásený. Môžete použiť Získajte metóda v ukladacom priestore cookie na získanie relácie zo súboru cookie a pridanie relácie do požiadavky klienta.

The Získajte metóda vráti reláciu a chybu, ktorú môžete zvládnuť. Ak potrebujete overiť používateľa, môžete sa overiť alebo autorizovať v Prihlásiť sa psovod.

// obsluha prihlásenia načíta reláciu z obchodu cookie
funcPrihlásiť sa(spisovateľ http. ResponseWriter, vyžiadajte *http. žiadosť) {
session, err := cookieStore().Get (request, "Cookie Name From Request")

ak chyba!= nula {
log. Fatalln (chyba)
}

// tu nastavte overenie používateľa na základe operácie
relácie. Hodnoty["stav autorizácie"] = pravda
err = relácia. Uložiť (žiadosť, autor)

ak chyba!= nula {
vrátiť
}
}

Vlastnosť Hodnoty obsahuje údaje súvisiace s reláciou v úložisku súborov cookie:

The Uložiť metóda uloží reláciu do úložiska súborov cookie. Vo vašich obslužných nástrojoch budete potrebovať ďalšie overovacie opatrenia na vyššiu bezpečnosť.

Overenie stavu prihlásenia používateľa

Váš obslužný program overenia by mal načítať reláciu zo súboru cookie klienta pomocou úložiska súborov cookie Získajte metóda. Potom môžete obnoviť reláciu a overiť používateľa.

funccheckAuthStatus(spisovateľ http. ResponseWriter, vyžiadajte *http. žiadosť) {
session, err := cookieStore().Get (request, "Cookie Name From Request")

ak chyba!= nula {
log. Fatalln (chyba)
}

overený := relácia. Hodnoty["stav autorizácie"]

ak overené == pravda {
spisovateľ. WriteHeader (http. Stav OK) // napíšte stavový kód 200
vrátiť
} inak {
spisovateľ. WriteHeader (http. StatusBadRequest) // napíšte stavový kód 400 http
vrátiť
}
}

The overené premenná používa hodnoty vlastnosť na získanie stavu z úložiska súborov cookie. Príkaz if potom overí tento stav autentifikácie. Ak sa vyhodnotí k pravda, klient dostane 200 Stavový kód HTTP. Ak stav overenia nie je pravdivý, klient dostane stavový kód HTTP 400.

Obslužný nástroj na odhlásenie z relácie

Vaša funkcia obsluhy odhlásenia bude veľmi podobná funkcii obsluhy prihlásenia. Vymažete všetky údaje súvisiace s reláciou používateľa z úložiska súborov cookie a zrušíte stav overenia.

funcodhlásiť sa(spisovateľ http. ResponseWriter, vyžiadajte *http. žiadosť) {
session, err := cookieStore().Get (request, "Cookie Name From Request")

ak chyba!= nula {
vrátiť
}

// zruší reláciu používateľa z obchodu cookie
relácie. Hodnoty["stav autorizácie"] = falošný
err = relácia. Uložiť (žiadosť, autor)

ak chyba!= nula {
vrátiť
}
}

The odhlásiť sa funkcia handler zruší stav overenia relácie používateľa a uloží stav do úložiska súborov cookie.

Neuchovávajte citlivé údaje v reláciách

Relácie sú skvelé na ukladanie údajov, ale je najlepšie sa v nich vyhýbať ukladaniu citlivých údajov. Útočník môže uniesť reláciu, ak uložíte jej údaje do súboru cookie a odošlete ich cez obyčajný protokol HTTP. Bezpečnosť vašej aplikácie je pre používateľov dôležitá.

Relácie sú stavové a existuje veľa databázových implementácií ukladacích priestorov cookie pre balík Gorilla, pre databázy SQL aj NoSQL.