Muundo wa JSON Web Token (JWT)
JSON Web Token (JWT) ni mfumo wa wazi unaofafanua njia fupi na inayojitegemea ya kusambaza habari kwa usalama kati ya pande mbili kama kitu cha JSON. Tokeni hizi zimeundwa kwa sehemu tatu zilizotenganishwa kwa nukta. Sehemu hizo tatu ni:
- Kichwa (Header): Hubeba habari kuhusu jinsi tokeni ilivyosainiwa, ikijumuisha algoriti inayotumika na aina ya tokeni.
- Mzigo wa data (Payload): Ina madai (claims) ambayo ni taarifa kuhusu mtumiaji au data ya ziada.
- Sahihi (Signature): Inatumika kuhakikisha kuwa ujumbe haukubadilishwa njiani.
Zana ya Kigeuzi cha JWT inahitaji ubandike tokeni yenye muundo huu kamili ili iweze kufanya kazi. Kama ingizo halina sehemu hizi tatu zilizotenganishwa kwa nukta, mfumo utaonyesha ujumbe: "Sio JWT halali — inatarajiwa sehemu tatu zilizotenganishwa kwa nukta".
Usimbaji wa Base64URL na JSON katika JWT
Kila sehemu ya JWT inasimbwa kwa kutumia mfumo wa Base64URL kabla ya kuunganishwa kwa nukta. Base64URL ni toleo la Base64 linalofaa kwa matumizi ya URL kwa sababu halitumii herufi kama + au / ambazo zina maana maalum kwenye anwani za wavuti.
Data iliyomo ndani ya kichwa na mzigo wa data lazima iwe katika muundo wa JSON uliorandishwa vizuri kabla ya kusimbwa. Wakati wa kutumia zana hii, makosa ya usimbaji au muundo yanatambuliwa na kuonyeshwa kama ifuatavyo:
- Kama kichwa hakiwezi kutafsiriwa kwa sababu ya hitilafu ya Base64URL, utaona ujumbe: "Imeshindwa kutafsiri kichwa — Base64URL si halali".
- Kama mzigo wa data una hitilafu ya usimbaji, mfumo utaonyesha: "Imeshindwa kutafsiri mzigo wa data — Base64URL si halali".
- Kama usimbaji upo sawa lakini muundo wa ndani si JSON halali, utapata ujumbe: "Kichwa si JSON halali" au "Mzigo wa data si JSON halali".
Pia, kuna kikomo cha urefu wa herufi ambapo ingizo likiwa refu kupita kiasi, mfumo utatoa taarifa: "Hiyo ni ndefu sana kuwa JWT halisi".
Kichwa cha JWT na Madai ya Kawaida
Kichwa cha JWT kinafafanua sifa za kiufundi za tokeni. Ndani ya sehemu hii, kuna madai (claims) mawili ya kawaida ambayo zana hii inayatoa na kuyaonyesha kwenye matokeo:
- Algoriti (
alg): Inabainisha algoriti ya usalama inayotumika kusaini tokeni, kama vile HS256 au RS256. Kwenye matokeo ya zana hii, sehemu hii inaitwa "Algoriti". - Aina (
typ): Inabainisha aina ya tokeni, ambayo kwa kawaida huwa ni "JWT". Kwenye matokeo ya zana hii, sehemu hii inaitwa "Aina".
Zana hii inasoma madai haya moja kwa moja kutoka kwenye JSON iliyotafsiriwa ya kichwa na kuyaweka kwenye sehemu maalum ya muhtasari ili kurahisisha uchambuzi.
Mzigo wa Data na Udhibiti wa Muda wa Tokeni
Mzigo wa data una taarifa halisi ambazo mfumo unahitaji kuzisoma. Ndani ya mzigo wa data, kuna madai maalum yanayohusiana na muda ambayo ni muhimu kwa usalama wa mfumo:
iat(Issued At): Muda ambao tokeni ilitolewa. Kwenye zana hii, inaonyeshwa kama "Imetolewa mnamo".exp(Expiration Time): Muda ambao tokeni inakoma kufanya kazi. Kwenye zana hii, inaonyeshwa kama "Inamalizika muda".
Zana hii inasoma madai haya na kuonyesha hali ya tokeni kupitia beji maalum ya "Hali". Hali hizi zinaweza kuwa:
- "Halali": Ikiwa muda wa sasa haujafikia muda wa kuisha uliowekwa kwenye
exp. - "Imeisha muda": Ikiwa muda uliowekwa kwenye
expumeshapita. - "Bado si halali": Ikiwa tokeni ina muda wa kuanza kutumika ambao bado haujafikiwa.
- "Haina mwisho wa muda": Ikiwa tokeni haina kabisa dai la
exp.
Ni muhimu kukumbuka kuwa tathmini hii inategemea muda pekee, na zana inatoa angalizo hili: "Hii hukagua dai la exp pekee — haithibitishi sahihi, mtoaji au hadhira".
Tofauti Kati ya Kutafsiri na Kuhakiki JWT
Kuna tofauti kubwa sana ya kiusalama kati ya kutafsiri (decoding) na kuhakiki (verifying) tokeni ya JWT:
- Kutafsiri: Ni mchakato wa kubadilisha tu herufi za Base64URL zilizopo kwenye kichwa na mzigo wa data ili kusoma yaliyomo ndani yake. Mchakato huu hauhitaji ufunguo wowote wa usalama na unaweza kufanywa na mtu yeyote anayeona tokeni hiyo.
- Kuhakiki: Ni mchakato wa kutumia siri ya kusaini (signing secret) au ufunguo wa umma (public key) ili kuhakikisha kuwa saini ya tokeni ni halali na haijatengenezwa au kubadilishwa na mtu asiyeidhinishwa.
Zana hii haihakiki saini ya JWT na haitakuomba kamwe ufunguo wa siri au ufunguo wa umma. Kutokana na hili, kutumia tokeni iliyotafsiriwa tu bila kuihakiki kwenye mfumo wako wa nyuma (backend) kunaweza kuleta hatari kubwa ya usalama, kwani mtumiaji anaweza kubadilisha data ya mzigo wa data na kuwasilisha tokeni ghushi.
Usalama na Faragha ya Data Yako
Unapotumia zana hii, usalama wa data yako unalindwa kwa sababu usindikaji wote unafanyika ndani ya kifaa chako. Tokeni yako inatafsiriwa kwenye kivinjari chako, na hakuna habari yoyote inayopakiwa kwenye seva za BroBroGo.
Wakati wa kutumia kiolesura, ukibofya kitufe cha "Futa", ingizo lote linaondolewa na mwelekeo unarudi kwenye sehemu ya kuandikia ili uweze kuweka tokeni nyingine kwa urahisi. Kama hakuna ingizo lolote, mfumo unabaki kwenye hali ya "Tayari. Bandika JWT ili kuitafsiri" na maeneo ya matokeo yanafichwa.
Maswali Yanayoulizwa Mara kwa Mara
Je, ni salama kubandika JWT yangu hapa?
Ndiyo. Utafsiri unafanyika kikamilifu kwenye kivinjari chako — tokeni yako haitawahi kutumwa kwa BroBroGo.
Je, hii inahakiki saini?
Hapana. Inatafsiri tu kichwa (header) na mzigo wa data (payload) ili uweze kusoma. Kuhakiki saini kunahitaji siri ya kusaini au ufunguo wa umma, ambao zana hii haiombi kamwe.
Ninawezaje kujua ikiwa tokeni yangu imeisha muda wake?
Kiondoa msimbo kinasoma dai la 'exp' na kuonyesha beji ya hali — halali, imeisha muda, bado si halali, au haina mwisho wa muda — kando ya tokeni iliyotafsiriwa.