JWT vs Session: liema mekkaniżmu ta' awtentikazzjoni għandek tagħżel?
Li tawtentika utent ifisser li tkun taf f'kull talba min hu. Żewġ familji kbar jikkompetu: is-sessjonijiet tas-server, fejn is-server iżomm rekord tal-utent konness, u l-JSON Web Tokens (JWT), fejn l-identità tivvjaġġa f'token iffirmat miġjub mill-klijent. L-għażla tinfluwenza s-sigurtà, il-kapaċità li tiskala u l-faċilità li toħroġ utent. Hawn kif tiddeċiedi skont il-kuntest tiegħek.
Is-sessjonijiet tas-server (stateful)
B'sessjoni, is-server joħloq identifikatur ta' sessjoni mal-konnessjoni, jaħżen id-data assoċjata (identità, rwoli, basket) fuq in-naħa tas-server (memorja, Redis, bażi tad-data) u jibgħat lura lill-browser cookie li jkun fih biss dak l-identifikatur. F'kull talba, is-server jaqra l-cookie, isib is-sessjoni u jkun jaf min qed jitkellem.
- Stat fuq in-naħa tas-server: is-sors tal-verità jibqa' fuq is-server, il-klijent iġorr biss referenza opaka.
- Revoka immedjata: it-tħassir tas-sessjoni fuq is-server joħroġ lill-utent istantanjament.
- Cookie: trażmess awtomatikament mill-browser, idealment b'
HttpOnly,SecureuSameSite.
Il-JSON Web Tokens (stateless)
JWT huwa token awtonomu magħmul minn tliet partijiet ikkodifikati f'base64url u mifruda b'punti: header, payload (il-claims, pereżempju l-identifikatur tal-utent u l-iskadenza) u firma. Is-server jiffirma t-token mal-konnessjoni; wara, ikun biżżejjed li jivverifika l-firma biex jafda l-kontenut, mingħajr ma jaħżen xejn.
- Mingħajr stat: l-informazzjoni kollha meħtieġa tinsab fit-token, is-server ma jeħtieġx memorja kondiviża.
- Verifikabbli kullimkien: kwalunkwe servizz li jaf iċ-ċavetta jista' jivvalida t-token, prattiku għall-arkitetturi distribwiti u s-SSO.
- Għodod: tista' tispezzjona token bid-dekowder JWT tagħna, tikkontrolla l-firma tiegħu bil-verifikatur JWT jew toħloq wieħed bil-ġeneratur JWT.
Tabella komparattiva
| Kriterju | Sessjoni tas-server | JWT |
|---|---|---|
| Stat | Stateful (maħżun fis-server) | Stateless (miġjub mill-klijent) |
| Ħażna fis-server | Meħtieġa (Redis, bażi) | L-ebda |
| Revoka | Immedjata | Diffiċli qabel l-iskadenza |
| Skalabbiltà orizzontali | Teħtieġ ħażna kondiviża | Native |
| Daqs trażmess | Żgħir (identifikatur) | Akbar (claims iffirmati) |
| Cross-domain / SSO | Ristrettiv | Adattat |
| Superfiċje XSS | Baxxa b'cookie HttpOnly | Għolja jekk maħżun f'localStorage |
Sigurtà: XSS, CSRF u revoka
Iż-żewġ approċċi huma siguri jekk ikunu implimentati sew, iżda r-riskji tagħhom huma differenti.
- XSS: cookie ta' sessjoni
HttpOnlyma jistax jiġi aċċessat mill-JavaScript, għalhekk huwa protett mis-serq permezz ta' injezzjoni. JWT maħżun f'localStoragemin-naħa l-oħra jista' jinqara minn kull script, u dan jagħmlu mira favorita. Il-ħażna tal-JWT f'cookieHttpOnlytneħħi dak il-vantaġġ tal-JWT iżda terġa' ddaħħal ir-riskju CSRF. - CSRF: il-cookies jintbagħtu awtomatikament, għalhekk vulnerabbli għas-CSRF mingħajr protezzjoni (attribut
SameSite, token anti-CSRF). JWT mibgħut manwalment fil-headerAuthorizationmhuwiex affettwat. - Revoka: dan huwa l-punt dgħajjef tal-JWT. Billi huwa awtonomu, ma tistax tinvalidah qabel l-iskadenza tiegħu mingħajr ma terġa' ddaħħal stat fis-server (lista ta' revoka, blacklist). Sessjoni titħassar istantanjament.
Skalabbiltà u arkitettura
Fuq server wieħed, is-sessjonijiet huma triviali. Hekk kif tqassam it-tagħbija fuq diversi istanzi, kull istanza trid taċċessa s-sessjonijiet: teħtieġ ħażna kondiviża (Redis) jew sticky sessions. Il-JWT jiddi hawn, għax kwalunkwe istanza tivvalida t-token mingħajr sejħa tan-netwerk u mingħajr ħażna komuni.
- Microservices: JWT jippropaga l-identità minn servizz għal ieħor mingħajr bażi ċentrali.
- API pubbliċi u mobile: il-JWT jevita l-ġestjoni tal-cookies fuq in-naħa tal-klijent nattiv.
- Monolit klassiku: is-sessjoni tibqa' aktar sempliċi u aktar sigura b'mod awtomatiku.
Meta tagħżel wieħed jew l-ieħor
Agħżel is-sessjonijiet meta
- Qed tiżviluppa applikazzjoni web klassika b'rendering fuq is-server
- Ir-revoka immedjata hija kritika (bank, saħħa, back-office)
- Trid l-aktar soluzzjoni sigura b'mod awtomatiku, bl-inqas nases
- L-infrastruttura tiegħek tiflaħ ħażna ta' sessjonijiet kondiviża mingħajr tbatija
Agħżel il-JWT meta
- Tesponi API kkonsmat minn SPA, mobile jew partijiet terzi
- Għandek arkitettura microservices jew SSO bejn id-dominji
- Trid tiskala orizzontalment mingħajr ħażna kondiviża
- Taċċetta li timmaniġġja l-iskadenza qasira u t-tiġdid tat-tokens
Rakkomandazzjoni
Għall-maġġoranza tal-applikazzjonijiet web, is-sessjonijiet tas-server jibqgħu l-aktar għażla sigura u sempliċi: revoka immedjata, cookie HttpOnly u l-ebda ġestjoni ta' token fuq in-naħa tal-klijent. Irriserva l-JWT għall-każijiet fejn in-nuqqas ta' stat tiegħu jġib valur reali: API stateless, mobile, microservices, SSO.
Jekk tagħżel il-JWT, żomm ħajja qasira (ftit minuti) flimkien ma' refresh token maħżun f'cookie HttpOnly, u pprovdi lista ta' revoka għall-każijiet sensittivi. B'hekk tgħaqqad l-aħjar taż-żewġ dinjiet.
Mistoqsijiet frekwenti
JWT huwa kriptat?
Le, b'mod awtomatiku JWT huwa biss iffirmat, mhux kriptat. Il-payload tiegħu huwa kkodifikat f'base64url u jista' jinqara minn kull min jinterċettah. Qatt ma tpoġġi data sensittiva ċara f'JWT. Biex tikkripta l-kontenut, trid tuża JWE (JSON Web Encryption).
Fejn taħżen JWT fuq in-naħa tal-klijent?
L-aktar sigur huwa cookie HttpOnly, Secure u SameSite, li jipproteġi mis-serq permezz tal-XSS. Il-localStorage huwa aktar sempliċi iżda jesponi t-token għal kull script malizzjuż. Evitah għal tokens b'privileġġ għoli.
Kif toħroġ utent b'JWT?
Billi t-token huwa awtonomu, il-ħruġ reali jeħtieġ jew li tistenna l-iskadenza tiegħu, jew li żżomm lista ta' revoka fuq is-server. Huwa għalhekk li jintużaw ħajjiet qosra u refresh token li jista' jiġi revokat.
Wieħed jista' jgħaqqad sessjonijiet u JWT?
Iva, hija prattika komuni: access token JWT b'ħajja qasira għas-sejħat tal-API, u refresh token immaniġġjat bħal sessjoni (maħżun u revokabbli fuq is-server) biex iġedded l-access token.