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.