GraphQL.cz/Fórum/Jak mohu nastavit JWT autentizaci v GraphQL API?

Jak mohu nastavit JWT autentizaci v GraphQL API?

Chtěl bych se zeptat na něco kolem autentizace v GraphQL API. Mám už nějakou dobu rozjetý projekt, který využívá GraphQL jako backend a teď přemýšlím, jak nejlépe implementovat systém pro ověřování uživatelů. Narazil jsem na koncept JSON Web Tokenů (JWT), ale nejsem si úplně jistý, jak to všechno správně nastavit. Jaké kroky bych měl udělat, abych to zprovoznil? Jakým způsobem generuji token a jak ho poté ověřuji při každém požadavku? Zajímalo by mě, jestli potřebuju nějaké speciální knihovny nebo jestli se dá vše udělat v čistém JavaScriptu. Také by mě zajímalo, jak je to s ochranou citlivých dat – co všechno bych měl mít na paměti při práci s JWT? Je nutné implementovat nějaké bezpečnostní opatření? Taky nevím, jak to celé napojit na frontend, abych byl schopen token uložit a posílat ho s každým požadavkem. Budu rád za každou radu a tipy, které mi pomohou lépe pochopit tuto problematiku.

149 slov
1.5 minut čtení
14. 10. 2023
Antonín Říha
Antonín Říha

Takže, pokud chceš nastavit JWT autentizaci v GraphQL, tohle je pár kroků, co bys měl udělat. První věc je generovat ten JWT po úspěšném přihlášení. V Node.js můžeš použít knihovnu jako jsonwebtoken, to je docela standard. Tvoje API by mělo mít endpoint pro přihlášení, kde ověříš uživatelský jméno a heslo a pokud je to ok, tak vytvoříš token. Ten token pak vrátíš klientovi.

Na straně klienta si ho můžeš uložit do localStorage nebo sessionStorage (ale pamatuj, že localStorage je trvalejší). Potom při každém GraphQL požadavku musíš posílat ten token jako součást hlavičky – většinou se používá Authorization: Bearer <token>.

Server pak musí mít middleware, který ten token zkontroluje. Zase se dá použít jsonwebtoken ke dekódování a ověření tokenu, což ti řekne, jestli je validní a kdo ho podepsal.

Co se týče bezpečnosti, dej si pozor na expiraci tokenu – nastav mu čas platnosti, aby se nemohl používat donekonečna. Můžeš taky implementovat refresh tokeny pro lepší UX. Vždycky se ujisti, že používáš HTTPS, jinak by ti to mohli snadno odchytit.

Jinak na frontendu si dej bacha na XSS útoky – jakmile máš token v localStorage, může být zranitelný. A jo, nezapomeň se pořádně naučit ty základy bezpečnosti kolem JWT. To je fakt důležitý.

198 slov
2 minut čtení
8. 9. 2024
Elena Daňková
Elena Daňková

Takže, abys měl JWT autentizaci v GraphQL, tady je pár základních kroků. Nejprve si musíš nainstalovat nějaké knihovny pro práci s JWT. Pokud používáš Node.js, doporučuju jsonwebtoken, což je jednoduchý a dost rozšířený balík. Pak začneš tím, že při úspěšném přihlášení uživatele vygeneruješ token pomocí funkce sign. Ulož do tokenu ID uživatele a nějaký časový limit (např. 1 hodina). Tenhle token pak pošleš zpět uživateli, většinou v response na přihlášení.

Pak, co se týká ověření tokenu, můžeš použít middleware, který zkontroluje každý příchozí request. V tom middleware vezmeš token z hlavičky autorizačního (Authorization) pole a ověříš ho pomocí verify funkce ze stejné knihovny. Pokud je token platný, můžeš pokračovat v obsluze požadavku; pokud ne, vrátíš chybu.

Co se týče ochrany citlivých dat, je důležité mít tajný klíč (secret key) pro podepisování tokenu uložený bezpečně, ideálně v env proměnných. Nikoho bys neměl pouštět k citlivým informacím, takže dobře nastav CORS a další bezpečnostní opatření.

Na frontend to budeš mít jednodušší; po přihlášení si ten token normálně uložíš do local storage nebo cookies a pak ho posíláš s každým požadavkem jako autorizační hlavičku. Takže to shrnu: generuj token na serveru, ověřuj ho pro každý request a pamatuj na bezpečnostní praktiky. Sice to může znít složitě, ale jakmile to jednou uděláš, bude to pak už celkem straightforward.

212 slov
2.1 minut čtení
13. 4. 2024
Jindřiška Buchtová
Jindřiška Buchtová

Nastavení JWT autentizace v GraphQL API není zas tak složitý proces. Tady je pár kroků, jak na to: nejdřív si vyber nějakou knihovnu pro generování a ověřování tokenů – populární jsou třeba jsonwebtoken nebo jose. Ty ti umožní snadno vytvářet JWT, které pak pošleš uživateli po úspěšném přihlášení.

Při přihlášení uživatele ověříš jeho údaje, a pokud jsou správné, vytvoříš token s nějakými informacemi (třeba ID uživatele), který pak pošleš zpět. Důležitý je mít tajný klíč (secret) pro podepisování tokenů. Ten si dobře schovej, protože bez něj nikdo nemůže tokeny validně podepsat.

Na každém požadavku od klienta budeš potřebovat zkontrolovat, jestli je token platný. Klient pak může token uložit do localStorage nebo cookies a posílat ho v hlavičce Authorization (např. "Bearer <token>"). Na serverové straně se udělá kontrola – vezmeš token z hlavičky a ověříš ho pomocí té knihovny.

Když jde o bezpečnost, nezapomeň na expiraci tokenu a pravidelně ho obnovuj, aby se ti tam nedostali nějací nechtění návštěvníci. A rozhodně se vyhni ukládání citlivých dat přímo v tokenu.

A na frontendě? Jakmile uživatel dostane token, můžeš ho uložit a pak ho posílat s každým požadavkem na server. Je dobrý mít nějakou logiku, která tohle zařídí automaticky.

Takže v podstatě: ověření -> generování tokenu -> odeslání klientovi -> validace na serveru při každém požadavku. Snad to pomůže!

211 slov
2.1 minut čtení
7. 3. 2024
Jarmila Kopecká
Jarmila Kopecká
Podobné otázky