A munkamenetek népszerű felhasználói hitelesítési lehetőségek az interneten. A munkamenet egy olyan időszak, amely alatt a felhasználó aktívan foglalkozik egy alkalmazással. A munkamenet élettartama akkor kezdődik, amikor a felhasználó bejelentkezik, és akkor ér véget, amikor kijelentkezik.
A HTTP állapot nélküli protokoll, ezért gyakran manuálisan kell nyomon követnie a felhasználói tevékenységet.
Az alkalmazás szerver oldalán egyedi értéket hozhat létre, lehetőleg kriptográfiailag biztonságosat. Ezt követően ezt egy cookie-ban tárolhatja, amelyet az ügyfél a jövőbeni kérésekre elküld az alkalmazásnak, így létrehozva egy állapotformát.
Munkamenetek a Go-ban
Használhatja a net/http csomagot a munkamenetek megvalósításához, és sok olyan csomag létezik, amely már ezt teszi. A legnépszerűbb a Gorilla sessions csomag. Ez a csomag cookie- és fájltárolási funkciókat biztosít az egyéni munkamenet-háttér-infrastruktúra mellett.
Futtassa ezt a parancsot a Go munkaterületen a Gorilla sessions csomag telepítéséhez.
megy töltse le a github.com/gorilla/sessions webhelyet
Ebben az oktatóanyagban cookie-tárolót fog használni a munkamenetekhez. A net/http csomag segítségével elindíthat egy webszervert, amely ellenőrzi a felhasználó problémáját és visszavonja a munkameneteket.
Íme az oktatóanyag követéséhez szükséges importálások listája.
import (
"github.com/gorilla/sessions"
"napló"
"net/http"
)
Az log csomag a naplózással kapcsolatos műveletekre szolgál a felhasználó hitelesítésének állapota alapján.
Egy egyszerű sütibolt megvalósítás
A bejelentkezési és kijelentkezési kezelő funkcióihoz szüksége lesz egy cookie-tárolóra. A cookie-tárolóhoz titkos kulcsra lesz szüksége a hitelesítéshez.
Itt van egy funkció a cookie-tároló megvalósításához.
// a cookieStore funkció cookie-tárolót hoz létre a felhasználó titkos kulcsával
funccookieStore() *üléseken.CookieStore {
Titkos kulcs := []byte("szuper-titkos-SecretKey")
cookieStore := munkamenetek. NewCookieStore (SecretKey)
// függvény visszaadja a cookie-tárolót, így más funkciók is hozzáférhetnek
Visszatérés cookieStore
}
Ban,-ben cookieStore függvény, a deklarált titkos kulcs változó Titkos kulcs egy példa a titkos kulcsra. A gyártás során a titkos kulcsnak kriptográfiailag biztonságosnak kell lennie, például a kriptográfiai csomag használatával. Be kell töltenie a titkot is innen környezeti változókat tartalmazó fájl.
A függvény a. értékét adja vissza *ülések. CookieStore típus, amely a titkos kulccsal védett cookie-tárolót jelöli. Használja a CookieStore funkciót a te Belépés és Kijelentkezés kezelők a felhasználók hitelesítéséhez és a munkamenetek hozzárendeléséhez.
A bejelentkezéskezelő funkció
Mielőtt munkamenetet hozna létre a bejelentkezéskezelő funkcióban, ellenőriznie kell, hogy a felhasználó be van-e már jelentkezve. Használhatja a Kap módszert a cookie-tárolóban, hogy lekérjen egy munkamenetet a cookie-ból, és hozzáadja a munkamenetet az ügyfél kéréséhez.
Az Kap metódus visszaadja a munkamenetet és egy kezelhető hibát. Ha hitelesítenie kell a felhasználót, akkor a hitelesítést vagy engedélyezést a következő helyen végezheti el Belépés kezelő.
// a bejelentkezéskezelő lekéri a munkamenetet a cookie Store-ból
funcBelépés(író http. ResponseWriter, kérje a *http. Kérés) {
session, err := cookieStore().Get (kérés, "Cookie név a kérelemből")ha hiba! = nulla {
log. Fatalln (hiba)
}// itt állítsa be a felhasználói hitelesítést a művelet alapján
ülés. Értékek["auth status"] = igaz
err = munkamenet. Mentés (kérés, író)
ha hiba! = nulla {
Visszatérés
}
}
Az Values tulajdonság a munkamenethez kapcsolódó adatokat tárolja a cookie-tárolóban:
Az Megment módszer elmenti a munkamenetet a cookie-tárolóba. A kezelőkben más hitelesítési intézkedésekre lesz szükség a nagyobb biztonság érdekében.
Felhasználó bejelentkezési állapotának ellenőrzése
Az ellenőrzés kezelőjének le kell kérnie a munkamenetet az ügyfél cookie-jából a cookie-tároló használatával Kap módszer. Ezután lekérheti a munkamenetet és hitelesítheti a felhasználót.
funccheckAuthStatus(író http. ResponseWriter, kérje a *http. Kérés) {
session, err := cookieStore().Get (kérés, "Cookie név a kérelemből")ha hiba! = nulla {
log. Fatalln (hiba)
}hitelesített := munkamenet. Értékek["auth status"]
ha hitelesített == igaz {
író. WriteHeader (http. ÁllapotOK) // 200-as állapotkód írása
Visszatérés
} más {
író. WriteHeader (http. StatusBadRequest) // 400-as http állapotkód írása
Visszatérés
}
}
Az hitelesített változó a Értékek tulajdonság az állapot lekéréséhez a cookie-tárolóból. Az if utasítás ezután ellenőrzi ezt a hitelesítési állapotot. Ha úgy értékeli igaz, az ügyfél megkapja a 200 HTTP állapotkód. Ha a hitelesítési állapot nem igaz, az ügyfél megkapja a 400 HTTP-állapotkódot.
A munkamenet kijelentkezési kezelője
A kijelentkezéskezelő funkciója nagyon hasonló lesz a bejelentkezéskezelő funkcióhoz. Ön törli a cookie-tárból a felhasználói munkamenethez kapcsolódó összes adatot, és érvényteleníti a hitelesítési állapotot.
funcKijelentkezés(író http. ResponseWriter, kérje a *http. Kérés) {
session, err := cookieStore().Get (kérés, "Cookie név a kérelemből")ha hiba! = nulla {
Visszatérés
}// érvényteleníti a felhasználói munkamenetet a cookie Store-ból
ülés. Értékek["auth status"] = hamis
err = munkamenet. Mentés (kérés, író)
ha hiba! = nulla {
Visszatérés
}
}
Az Kijelentkezés A kezelő funkció érvényteleníti a felhasználó munkamenet-hitelesítési állapotát, és elmenti az állapotot a cookie-tárolóba.
Ne tároljon érzékeny adatokat a munkamenetekben
A munkamenetek kiválóak az adatok tárolására, de a legjobb, ha elkerüljük az érzékeny adatok tárolását. A támadó eltérítheti a munkamenetet, ha az adatait cookie-ban tárolja, és sima HTTP-n keresztül küldi el. Az alkalmazás biztonsága fontos a felhasználók számára.
A munkamenetek állapotfüggőek, és számos cookie-tároló adatbázis-megvalósítása létezik a Gorilla-csomaghoz, mind az SQL-, mind a NoSQL-adatbázisokhoz.