GraphQL.cz/Fórum/Jaké jsou nejlepší praktiky pro použití tokenů v GraphQL?

Jaké jsou nejlepší praktiky pro použití tokenů v GraphQL?

Chtěl bych se zeptat, jaké jsou nejlepší praktiky pro práci s tokeny v GraphQL. Vím, že při vytváření API je důležité zabezpečení a autentizace uživatelů, ale nejsem si jistý, jak na to jít správně. Jak by se měly tokeny generovat a uchovávat? Mělo by se použít JWT nebo nějaký jiný typ tokenu? A co expirace tokenů, jak dlouho by měly být platné? Jaké jsou doporučené postupy pro obnovu tokenů, pokud vyprší jejich platnost? Také by mě zajímalo, jak nejlépe implementovat autorizaci pomocí těchto tokenů v GraphQL dotazech. Mám obavy, že bych mohl narazit na problémy s výkonem, pokud nebudu mít správně nastavené cacheování nebo nějakou jinou optimalizaci. A co ochrana před CSRF útoky? Jakým způsobem se dá zabezpečit API proti těmto hrozbám? Narazil jsem také na informace o různých strategických přístupech k řízení přístupu v rámci GraphQL, ale nevím, která metoda je pro konkrétní aplikaci ta nejlepší. Chci se ujistit, že moje aplikace bude nejen funkční, ale také bezpečná a efektivní. Byl bych rád za jakékoliv rady nebo zkušenosti z praxe, které by mi pomohly lepší pochopit tuto problematiku a implementovat ji správně.

183 slov
1.8 minut čtení
9. 7. 2021
David Duchoň

K tokenům v GraphQL bych doporučil pár základních věcí. V první řadě, JWT (JSON Web Tokens) je super volba pro autentizaci, protože je lehký a snadno se používá. Generuj je na serveru po přihlášení uživatele a pak je posílej s každým dotazem v hlavičce "Authorization". Co se expirace týče, tak 15-30 minut na access token je fajn, ale nezapomeň mít i refresh token, který může mít delší platnost – třeba několik dní nebo měsíc. Ten pak použiješ na získání nového access tokenu, když ten starý vyprší.

Ohledně autorizace v dotazech, můžeš použít middleware nebo resolvery, které zkontrolují token a podle toho povolí nebo zamítnou přístup k určitým datům. Jo a nezapomínej na cachování, to ti může dost zrychlit odpovědi. Třeba pro query můžeš použít cache na úrovni resolverů.

A CSRF? V GraphQL se to obvykle řeší tím, že se API volá z klienta přímo s tokenem v hlavičkách. Ale pokud máš nějaké formuláře, tak přidej CSRF tokeny do požadavků. To ti pomůže chránit se proti útokům.

Strategie pro řízení přístupu závisí na tvých potřebách – můžeš mít role-based access control (RBAC) nebo attribute-based (ABAC). Měj na paměti, že důležitá je konsistence a bezpečnost. Takže implementuj co nejvíc zabezpečení hned od začátku.

198 slov
2 minut čtení
4. 2. 2024
Ivana Veselá

Když jde o tokeny v GraphQL, tak je fajn se řídit pár základními pravidly. Začni s generováním tokenů, většinou se doporučuje používat JWT, protože je to standard a dost rozšířené. Měj na paměti expiraci – ideálně nastav token na pár hodin, třeba 2-4 hodiny, aby si omezil riziko zneužití. Pro obnovu tokenu můžeš udělat refresh token, což je další token s delší expirací, který se použije pro generování nového access tokenu.

Co se týče autorizace v GraphQL, tak si dej pozor na to, jak implementuješ resolvery - měl bys kontrolovat oprávnění uživatele na začátku každého resolveru. Vysoká granularita autorizace je klíčová. K cacheování dat se dá přistupovat opatrně, protože můžeš mít různá oprávnění pro různé uživatele; třeba použij cache na úrovni serveru a ne na úrovni dat.

CSRF útokům se bráníš tím, že API bude přijímat pouze tokeny přes HTTP header a ne přes URL či cookies. V tomhle ohledu je dobrý mít CORS nastavený správně a povolit jen konkrétní domény.

No a pak je tu ten problém s řízením přístupu – dávej pozor na to, jaké úrovně máš nastavené. Role-based access control (RBAC) nebo attribute-based access control (ABAC) jsou obě možnosti, ale záleží na komplexnosti aplikace. Vždycky mysli na bezpečnost a snaž se testovat potenciální slabiny.

204 slov
2 minut čtení
24. 1. 2024
Věra Benešová

Když pracuješ s tokenama v GraphQL, tak pár věcí je fakt důležitých. Začnu tím, že se většinou doporučuje použít JWT (JSON Web Tokens), protože jsou lehké a dají se snadno použít pro autentizaci a autorizaci. Generuj je na serveru po úspěšné přihlášení, ať už přes jméno a heslo nebo nějaký jiný mechanismus. Ulož je na klientovi, třeba do localStorage nebo cookies, ale dávej pozor na security nastavení.

Co se týče expirace, tak je fajn mít krátkou platnost, třeba 15-30 minut. Můžeš pak implementovat refresh token mechanismus, kde ti klient dostane krátkodobý access token a dlouhodobý refresh token, který použije k získání nového access tokenu, když ten starý vyprší.

Autorizaci prováděj na serveru v resolverech - prostě zkontroluj, zda má uživatel platný token a jestli má oprávnění k provedení dotazu/mutace. Aby ses vyhnul výkonovým problémům, můžeš používat caching na úrovni resolverů nebo query plánování.

Co se týče CSRF, tak pokud používáš JWT v localStorage, měli bys být v pohodě, ale pokud to máš v cookies, tak to chce správně nastavit SameSite atributy a další security hlavičky. Jinak zvaž i roli a scope uživatelů pro ještě lepší zabezpečení.

Každopádně to chce zkoušet a iterovat podle potřeb tvého projektu.

194 slov
1.9 minut čtení
8. 7. 2024
Daniela Navrátilová
GraphQL.cz/Články/Autentizace v GraphQL
Bezpečnostní standardy pro autentizaci GraphQL API: Přehled nejlepších praktikV tomto článku se podíváme na nejlepší praktiky pro zabezpečení autentizace v GraphQL aplikacích, včetně typických zranitelností a způsobů ochrany.
1000 slov
10 minut čtení
12. 2. 2020
Barbora Němcová
Přečíst článek
Podobné otázky