JWT vs Seisiún: cén sásra fíordheimhnithe ba cheart a roghnú?

Is é fíordheimhniú úsáideora ná a fhios a bheith agat cé hé ag gach iarratas. Bíonn dhá mhórtheaghlach in iomaíocht: na seisiúin freastalaí, áit a gcoinníonn an freastalaí rian den úsáideoir atá logáilte isteach, agus na JSON Web Tokens (JWT), áit a dtaistealaíonn an aitheantas i gcomhartha sínithe a iompraíonn an cliant. Bíonn tionchar ag an rogha ar an slándáil, ar an gcumas méadú ar an ualach agus ar an éascaíocht le húsáideoir a logáil amach. Seo conas cinneadh a dhéanamh de réir do chomhthéacs.

Na seisiúin freastalaí (stáitiúil)

Le seisiún, cruthaíonn an freastalaí aitheantóir seisiúin ag an logáil isteach, stórálann sé na sonraí gaolmhara (aitheantas, róil, ciseán) ar thaobh an fhreastalaí (cuimhne, Redis, bunachar sonraí) agus seolann sé fianán ar ais chuig an mbrabhsálaí nach bhfuil ann ach an t-aitheantóir sin. Ag gach iarratas, léann an freastalaí an fianán, aimsíonn sé an seisiún agus tá a fhios aige cé atá ag labhairt.

  • Stát ar thaobh an fhreastalaí: fanann foinse na fírinne ar an bhfreastalaí, ní iompraíonn an cliant ach tagairt theimhneach.
  • Cúlghairm láithreach: nuair a scriostar an seisiún ar thaobh an fhreastalaí logáiltear amach an t-úsáideoir láithreach.
  • Fianán: seoltar go huathoibríoch é leis an mbrabhsálaí, go hidéalach mar HttpOnly, Secure agus SameSite.

Na JSON Web Tokens (gan stát)

Is comhartha féin-iompartha é JWT atá comhdhéanta de thrí chuid arna ionchódú i base64url agus arna scaradh le poncanna: header, payload (na claims, mar shampla aitheantóir an úsáideora agus an éag) agus síniú. Síníonn an freastalaí an comhartha ag an logáil isteach; ina dhiaidh sin ní gá dó ach an síniú a fhíorú chun muinín a bheith aige as an ábhar, gan aon rud a stóráil.

  • Gan stát: tá an fhaisnéis go léir is gá sa chomhartha, ní gá don fhreastalaí cuimhne roinnte.
  • Infhíoraithe i ngach áit: is féidir le haon seirbhís a bhfuil an eochair ar eolas aici an comhartha a bhailíochtú, áisiúil le haghaidh ailtireachtaí dáilte agus SSO.
  • Uirlisí: is féidir leat comhartha a iniúchadh lenár díchódóir JWT, a shíniú a sheiceáil leis an fíoraitheoir JWT nó ceann a chruthú leis an gineadóir JWT.

Tábla comparáide

Critéar Seisiún freastalaí JWT
StátStáitiúil (stóráilte ar an bhfreastalaí)Gan stát (iompartha ag an gcliant)
Stóráil ar an bhfreastalaíRiachtanach (Redis, bunachar)Ceann ar bith
CúlghairmLáithreachDeacair roimh éag
Inscálaitheacht chothrománachStór roinnte riachtanachDúchasach
Méid arna tarchurBeag (aitheantóir amháin)Níos mó (claims sínithe)
Tras-fhearann / SSOSriantaOiriúnach
Dromchla XSSÍseal le fianán HttpOnlyArd má stóráiltear i localStorage

Slándáil: XSS, CSRF agus cúlghairm

Tá an dá chur chuige slán má chuirtear i bhfeidhm i gceart iad, ach bíonn a gcuid rioscaí éagsúil.

  • XSS: tá fianán seisiúin HttpOnly dorochtana don JavaScript, mar sin tá sé cosanta ó ghadaíocht trí instealladh. Os a choinne sin, tá JWT atá stóráilte i localStorage inléite ag aon script, rud a fhágann gur sprioc thábhachtach é. Má stóráiltear an JWT i bhfianán HttpOnly cealaítear an buntáiste sin de chuid JWT ach tugtar an riosca CSRF isteach arís.
  • CSRF: seoltar fianáin go huathoibríoch, mar sin tá siad leochaileach do CSRF gan chosaint (an aitreabúid SameSite, comhartha frith-CSRF). Níl baint ag JWT a sheoltar de láimh i gceanntásc Authorization leis seo.
  • Cúlghairm: seo é lagphointe an JWT. Toisc go bhfuil sé féin-iompartha, ní féidir é a neamhbhailíochtú roimh a éag gan stát freastalaí a thabhairt isteach arís (liosta cúlghairme, liosta dubh). Scriostar seisiún láithreach.

Inscálaitheacht agus ailtireacht

Ar fhreastalaí amháin, tá na seisiúin fánach. A luaithe a dháileann tú an t-ualach ar roinnt cásanna, caithfidh gach cás rochtain a fháil ar na seisiúin: teastaíonn stór roinnte (Redis) nó sticky sessions. Lonraíonn an JWT anseo, mar bailíochtaíonn aon chás an comhartha gan ghlao líonra ná stóráil choiteann.

  • Micrishirbhísí: iompraíonn JWT an t-aitheantas ó sheirbhís amháin go seirbhís eile gan bhunachar lárnach.
  • API poiblí agus móibíleach: seachnaíonn an JWT bainistíocht na bhfianán ar thaobh an chliaint dhúchasaigh.
  • Monalit clasaiceach: fanann an seisiún níos simplí agus níos sláine de réir réamhshocraithe.

Cathain ceann amháin nó an ceann eile a roghnú

Roghnaigh na seisiúin nuair

  • A fhorbraíonn tú feidhmchlár gréasáin clasaiceach le rindreáil freastalaí
  • A bhíonn an chúlghairm láithreach ríthábhachtach (banc, sláinte, cúloifig)
  • A theastaíonn uait an réiteach is sláine de réir réamhshocraithe, leis an líon is lú gaistí
  • A sheasann do bhonneagar ar stór seisiún roinnte gan phian

Roghnaigh an JWT nuair

  • A nochtann tú API a ídíonn SPAanna, móibíleach nó tríú páirtithe
  • A bhíonn ailtireacht micrishirbhísí nó SSO idir fearainn agat
  • A chaithfidh tú méadú go cothrománach gan stór roinnte
  • A nglacann tú le bainistíocht éaga ghairid agus athnuachan na gcomharthaí

Moladh

Don chuid is mó de na feidhmchláir ghréasáin, fanann na seisiúin freastalaí mar an rogha is sláine agus is simplí: cúlghairm láithreach, fianán HttpOnly agus gan bhainistíocht comhartha ar thaobh an chliaint. Coinnigh an JWT do na cásanna ina dtugann a easpa stáit fíorluach: API gan stát, móibíleach, micrishirbhísí, SSO.

Má roghnaíonn tú an JWT, coinnigh saolré ghairid (cúpla nóiméad) cúpláilte le refresh token atá stóráilte i bhfianán HttpOnly, agus déan soláthar do liosta cúlghairme do na cásanna íogaire. Comhcheanglaíonn tú ansin an chuid is fearr den dá shaol.

Ceisteanna coitianta

An bhfuil JWT criptithe?

Níl, de réir réamhshocraithe ní bhíonn JWT ach sínithe, ní criptithe. Tá a payload ionchódaithe i base64url agus inléite ag duine ar bith a thugann faoi. Ná cuir sonraí íogaire i ngléine i JWT riamh. Chun an t-ábhar a chriptiú, caithfear dul i muinín JWE (JSON Web Encryption).

Cá háit JWT a stóráil ar thaobh an chliaint?

Is é an rud is sláine ná fianán HttpOnly, Secure agus SameSite, a chosnaíonn ó ghadaíocht trí XSS. Tá an localStorage níos simplí ach nochtann sé an comhartha d'aon script mailíseach. Seachain é do chomharthaí ardphribhléide.

Conas úsáideoir a logáil amach le JWT?

Toisc go bhfuil an comhartha féin-iompartha, éilíonn an logáil amach fíor go bhfanfaí lena éag, nó go gcoinneofaí liosta cúlghairme ar thaobh an fhreastalaí. Sin é an fáth a n-úsáidtear saolréanna gairide agus refresh token is féidir, eisean, a chúlghairm.

An féidir seisiúin agus JWT a chomhcheangal?

Is féidir, is cleas coitianta é: access token JWT gairid-shaolach do ghlaonna API, agus refresh token a bhainistítear mar sheisiún (stóráilte agus inchúlghairthe ar thaobh an fhreastalaí) chun an access token a athnuachan.