Kifungua JWT Hufanya Nini Hasa
Tokeni ya JSON Web (JWT) inaonekana kama mfuatano mrefu, usioeleweka wa herufi za nasibu, lakini haijasimbwa fiche wala si msimbo wa siri. Ni chombo kidogo, salama kwa URL, kinachobeba data iliyopangwa kati ya pande mbili. Bandika tokeni kwenye kifungua kilicho hapo juu na kitagawanya mfuatano huo na kukuonyesha JSON halisi iliyo ndani — metadata, madai, tokeni ni ya nani, na inapoisha muda wake. Kila kitu hufanyika ndani ya kivinjari chako. Tokeni haipakiwi, kuhifadhiwa, wala kutumwa popote, jambo linalojali sana wakati kitu unachokichunguza ni cheti hai cha kikao.

Sehemu tatu, vitone viwili
Kila JWT iliyoundwa vizuri ni mifuatano mitatu iliyosimbwa Base64url iliyounganishwa na vitone: kichwa.mzigo.saini. Herufi hiyo moja ya kitone ndiyo njia vichunguzi hutambua mahali sehemu moja inapoishia na inayofuata kuanza, na ndiyo sababu tokeni yenye idadi isiyo sahihi ya vitone hukataliwa kabla ya kitu chochote hata kusomwa.
Kichwa ni kitu kidogo cha JSON kinachoelezea tokeni yenyewe. Karibu daima kina typ (aina, kwa kawaida JWT) na alg — algoritham ya kutia saini, kama HS256 (HMAC na SHA-256) au RS256 (RSA na SHA-256). Kichwa humwambia mthibitishaji kwa usahihi jinsi saini ilivyozalishwa.
Mzigo ni sehemu ambayo watu wengi hujali zaidi. Ni kitu kingine cha JSON kinachoshikilia madai — kauli kuhusu mtumiaji na tokeni. Kiwango hupanga madai katika yaliyosajiliwa (majina ya kawaida, yaliyohifadhiwa), ya umma, na ya faragha (majina maalum unayovumbua kwa programu yako mwenyewe). Kufungua mzigo ndiko kunakofunua nani ameingia, ana wadhifa gani, na kikao chake kinapoisha.
Saini ni muhuri wa kikriptografia. Huhesabiwa juu ya kichwa na mzigo vilivyosimbwa kwa kutumia algoritham kutoka kichwani pamoja na funguo ya siri au ya faragha. Kwa kuwa inashughulikia sehemu zote mbili nyingine, badiliko lolote kwenye kichwa au mzigo — hata herufi moja — huifanya isiwe halali.
Madai utakayoyaona zaidi
Madai yaliyosajiliwa ni majina mafupi, ya herufi tatu yaliyofafanuliwa na RFC 7519 ili mifumo tofauti iweze kufanya kazi pamoja. Machache hujitokeza karibu kila mahali:
iss— issuer (mtoaji): nani aliyeitengeneza tokeni (seva yako ya uthibitishaji au mtoa utambulisho).sub— subject (mhusika): kiini ambacho tokeni inahusu, kwa kawaida kitambulisho thabiti cha mtumiaji.aud— audience (hadhira): mpokeaji ambaye tokeni imekusudiwa kwake. API inapaswa kukataa tokeni ambazo hadhira yake si yenyewe.exp— expiration time (muda wa kuisha): muhuri wa muda wa Unix ambao baada yake tokeni haipaswi kukubaliwa.iat— issued at (ilitolewa saa): muhuri wa muda wa Unix ambapo tokeni iliundwa.
Unaweza pia kukutana na nbf (siyo kabla ya) na jti (kitambulisho cha kipekee cha tokeni). Muhuri za muda ni sekunde tangu 1970 kwa UTC, ndiyo sababu kifungua kinachoonyesha kama tarehe zinazosomeka na binadamu hukuokolea hesabu ya kiakili ya kuangalia kama tokeni imekwisha muda tayari.
Kufungua si kuthibitisha — hapa ndipo watu wanapokwazwa
Tofauti hii ndiyo jambo muhimu zaidi kuelewa kuhusu JWT. Kufungua humaanisha kusoma maudhui: hakuhitaji funguo yoyote na yeyote anayeshikilia tokeni anaweza kufanya hivyo, kwa sababu Base64url ni usimbaji, si usimbaji fiche. Kuthibitisha humaanisha kuthibitisha kuwa tokeni ni halisi na haijaguswa — kuhesabu tena saini kwa kutumia funguo sahihi ya siri au ya umma na kuthibitisha inalingana.
Chombo hiki hufungua. Kinakuonyesha kile tokeni inasema, si kama tokeni inaaminika. Tokeni inaweza kuwa imeghushiwa, kuisha muda, au kurudiwa na bado ikafunguka kuwa JSON inayoonekana safi kabisa. Kamwe usifanye uamuzi wa idhini kwa kutegemea madai yaliyofunguliwa pekee. Katika uzalishaji unathibitisha saini upande wa seva, unaangalia exp, na unathibitisha iss na aud zinalingana na unachotarajia — ukitumia maktaba iliyothibitishwa, kamwe si ulinganishaji wa mfuatano uliojengwa kwa mkono.

Mzigo si hazina
Kwa kuwa mzigo umesimbwa Base64url tu, unasomeka na yeyote anayenasa tokeni. Chukulia kila kitu ndani yake kuwa cha umma. Usiweke manenosiri, namba kamili za kadi za mkopo, funguo za siri, au data yoyote nyeti ya kibinafsi katika madai ya JWT — ikiwa unaweza kuifungua hapa kwa mbofyo mmoja, hivyo hivyo anaweza yeyote mwingine anayepata nakala. Saini hulinda dhidi ya mabadiliko, kamwe dhidi ya kusoma. Ikiwa kwa kweli unahitaji kuficha maudhui ya mzigo, hiyo ni kazi ya JWE (tokeni zilizosimbwa fiche), kiwango tofauti kabisa.
Faragha na vifaa vinavyohusiana
Kuchunguza tokeni ni tendo nyeti, hivyo kifungua hiki hufanya kazi kabisa upande wa mteja — uchambuzi ni JavaScript ya kawaida katika kichupo chako na hakuna kinachotoka kwenye kompyuta yako. Kubandika tokeni ya kikao katika chombo kinachotegemea seva humaanisha kumkabidhi mtu wa tatu cheti hai, jambo ambalo ndilo hasa unalopaswa kuepuka. Kwa usimbaji ulio chini yake yote, ona chombo chetu cha Base64, na chunguza vifaa vyetu vingine vya wasanidi programu kwa vifaa zaidi vinavyofanya kazi kwenye kifaa chako.
Maswali yanayoulizwa mara kwa mara
Je, JWT imesimbwa fiche?
Hapana. JWT ya kawaida imesimbwa Base64url, si kusimbwa fiche. Yeyote mwenye tokeni anaweza kusoma kichwa na mzigo. Tumia JWE ikiwa unahitaji maudhui yafichwe.
Je, chombo hiki huthibitisha saini?
Hapana. Kinafungua na kuonyesha kichwa na mzigo tu. Kuthibitisha saini kunahitaji siri ya mtoaji au funguo ya umma na inapaswa kufanywa kwenye seva yako.
Je, ni salama kubandika tokeni yangu hapa?
Ndiyo. Kufungua hufanyika kabisa ndani ya kivinjari chako kwa kutumia JavaScript ya ndani. Tokeni haiwahi kupakiwa, kuhifadhiwa, au kutumwa kwa seva yoyote.
iss, sub, aud, exp na iat vinamaanisha nini?
Ni madai yaliyosajiliwa: mtoaji, mhusika, hadhira, muda wa kuisha na muda wa kutolewa. Vitatu vinavyohusiana na muda hutumia muhuri za muda za Unix kwa sekunde.
Je, ninaweza kuamini madai yanayoonyeshwa baada ya kufungua?
Sio pekee yake. Madai yaliyofunguliwa yanaweza kutoka kwenye tokeni iliyoghushiwa au iliyoisha muda. Daima thibitisha saini na angalia muda wa kuisha upande wa seva kabla ya kuyaamini.
Kwa nini tokeni yangu ina sehemu tatu zilizotenganishwa na vitone?
Hizo ni kichwa, mzigo na saini, kila kimoja kikiwa kimesimbwa Base64url na kuunganishwa na vitone. Vitone huambia vichunguzi mahali kila sehemu inapoanzia na kuishia.
