GraphQL.cz/Fórum/Jak správně autentizovat uživatele při práci s GraphQL?

Jak správně autentizovat uživatele při práci s GraphQL?

Přemýšlím, jak to vlastně udělat s autentizací uživatelů, když pracuju s GraphQL. Mám na mysli, jakým způsobem nejlépe zabezpečit API, aby se k němu nedostali neautorizovaní uživatelé a zároveň aby to bylo pro ty oprávněné co nejjednodušší. Zkoušel jsem různé metody jako tokeny nebo session, ale pořád se mi zdá, že to není úplně ono. Jaký je ideální způsob autentizace v prostředí GraphQL? Je lepší používat JWT (JSON Web Tokens) nebo nějakou jinou formu autentizace? Jak to vlastně funguje s dotazy a mutacemi? Musím mít něco speciálního na serverové straně, abych mohl ověřovat tokeny nebo session? A co je třeba udělat, pokud se uživatel odhlásí? Budu potřebovat nějaké middleware nebo něco podobného? Rád bych znal názory ostatních, kdo mají zkušenosti s implementací autentizace v GraphQL projektech. Je tam něco, co byste doporučili nebo co určitě nedělat? Díky za každou radu!

140 slov
1.4 minut čtení
29. 6. 2021
Adéla Klímová

Když se bavíme o autentizaci v GraphQL, tak nejlepší cesta je většinou použít JWT. Je to docela standard teď, protože ti to umožňuje udělat stateless autentizaci. Uživatel se přihlásí, dostane token a ten pak posílá s každým dotazem v hlavičce. To je celkem jednoduchý a efektivní.

Na serveru pak potřebuješ nějaký middleware, který prověří ten token na každém requestu. Můžeš si udělat vlastní funkci nebo použít něco jako Express middleware, co to zvládne za tebe. Je dobrý mít na paměti, že JWT má expirační dobu, takže se musíš postarat o refresh tokeny, aby se uživatelé nemuseli neustále přihlašovat.

Když uživatel odhlásí, stačí mu prostě smazat token na klientovi. Na serveru nemusíš nic extra dělat, pokud nemáš blacklist tokenů. Ale to už je další úroveň zabezpečení.

Ohledně dotazů a mutací – funguje to stejně jako u RESTu. Prostě ověříš token před zpracováním dotazu nebo mutace a pokud je to platný, tak můžeš pokračovat.

Takže shrnutí: JWT jako tokeny, middleware pro ověřování a refresh tokeny pro pohodlí uživatelů. Není třeba nic složitýho, ale dej pozor na bezpečnostní aspekty. Dobré je taky nezapomínat na HTTPS, aby se ti tokeny nepřeváděly po síti v plain textu.

189 slov
1.9 minut čtení
24. 12. 2024
Viktor Jahoda

Autentizace v GraphQL fakt může být oříšek, ale tipy tu jsou. Většina lidí se shoduje, že JWT je skvělý způsob, jak to uchopit. Funguje to tak, že po přihlášení server vygeneruje token a ten se pak posílá s každým dotazem nebo mutací. Ulož si ho na klientovi (třeba do localStorage) a pak ho pošli v hlavičce Authorization. Na serveru potřebuješ middleware, který ti ověří platnost tokenu. Můžeš použít knihovny jako jsonwebtoken pro ověřování.

Co se týče session, to může být komplikovanější a většinou se používá s tradičními REST API. V GraphQL je častější právě ten JWT přístup. Po odhlášení bys měl token prostě smazat na klientovi a třeba invalidovat na serveru, pokud to chceš mít zabezpečené.

Mysli na to, že ve všech resolverech budeš muset kontrolovat, jestli uživatel má platný token, jinak mu nedovolíš provádět citlivé operace. A nemělo by se zapomínat na expiraci tokenu – nastav si časový limit pro jeho platnost, aby jsi snížil riziko zneužití.

Hlavně se vyhýbej ukládání citlivých informací do JWT, protože to pak může být nebezpečné. A raději si to celé pečlivě otestuj, aby jsi měl jistotu, že nikdo nebude mít přístup k něčemu, co nemá.

191 slov
1.9 minut čtení
19. 10. 2024
Oldřich Král

Když řešíš autentizaci v GraphQL, tak nejlepší možnost je určitě jít s JWT. Je to dost populární a funguje to tak, že při přihlášení uživatele mu vystavíš token, který si pak ukládá na klientovi (třeba do localStorage). Ten token pak posíláš s každým dotazem jako hlavičku, což je jednoduchý a efektivní. Na serveru pak potřebuješ middleware, který ten token ověří. Můžeš použít něco jako Express middleware, který zkontroluje platnost tokenu před tím, než se dostane k tvým resolverům.

Co se týče session-based autentizace, je to taky možné, ale může to být komplikovanější. Musíš mít serverovou část, která spravuje session a cookies, což je další vrstva složitosti.

Pokud se uživatel odhlásí, jednoduše smažeš jeho token na klientovi a na serveru můžeš udělat blacklist nebo to prostě ignorovat s tím, že expired tokeny už stejně nebudou fungovat.

Jako nedoporučuji používat základní autentizaci (basic auth) nebo cokoli, co by posílalo přihlašovací údaje v plaintextu. To je fakt špatný nápad. Takže jo, JWT je jasná volba, a nezapomeň na správné zabezpečení a expiraci tokenů.

169 slov
1.7 minut čtení
14. 8. 2023
Adam Dobeš
GraphQL.cz/Články/Microservices s GraphQL
Bezpečnostní best practices při práci s GraphQL microservicesObjevte klíčové techniky a doporučení pro zabezpečení vašich GraphQL microservices před běžnými hrozbami.
1000 slov
10 minut čtení
14. 5. 2021
Martin Černý
Přečíst článek
Podobné otázky