Authentication ni mlinzi anayesimama mlangoni mwa programu yako. Kila wakati mtu anapojiandikisha au kuingia, mfumo wako unapaswa kuamua ikiwa kweli ni yule anayedai kuwa yeye. Ukikosea, hufanyi tu marekebisho ya hitilafu ya kuingia (debugging a failed login). Unahatarisha data halisi za watumiaji kutoka nje moja kwa moja. Kufanya hivi kwa usahihi kunahitaji zana mbili zinazoaminika: Bcrypt kwa kulinda nywila (passwords) zilizohifadhiwa, na JSON Web Tokens kwa kuthibitisha utambulisho wakati mtumiaji anapotumia programu yako.

Kwa Nini Kuhifadhi kwa Plaintext Kunafeli

Ikiwa utachukua sheria moja tu kutoka kwenye makala hii, iwe hii: usihifadhi kamwe nywila kama plaintext kwenye hifadhidata yako. Haijalishi ikiwa hifadhidata yako iko nyuma ya firewall au ikiwa unawaamini wahandisi wote kwenye timu. Kuandika nywila kwenye majedwali katika hali yake ghafi ni kama kuacha funguo za nyumba chini ya mkeka wa kusalimia. Wakati mtu anapopata ufikiaji wa hifadhidata hiyo—kupitia API iliyowekwa vibaya, nakala ya akiba (backup) iliyovuja, au shambulio la injection—kila taarifa ya siri (credential) inafichuka papo hapo.

Madhara huongezeka kwa sababu watu hutumia tena nywila zilezile. Uvunjifu mmoja unaweza kuhatarisha si programu yako tu, bali pia barua pepe, akaunti za benki, na mitandao ya kijamii ya mtumiaji. Hii ndiyo sababu tunafanya hashing ya nywila. Hashing inabadilisha nywila kuwa mfululizo wa herufi zilizochanganywa ambao haufanani kabisa na ile ya awali. Mchakato huu ni wa upande mmoja na hauwezi kurudishwa nyuma. Huwezi kumimina asidi ya hisabati kwenye hash na kuifanya irudi kuwa ile nywila iliyoiunda.

Kufanya Hashing ya Nywila kwa Kutumia Bcrypt

Bcrypt ni hashing function iliyoundwa mahususi kwa ajili ya nywila. Inachukua mfululizo wa herufi (plain string), inaupitisha kwenye Blowfish cipher, na kutoa matokeo yanayofanana na $2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy. Kiambishi awali (prefix) hicho kinakuambia algorithm na cost factor. Sehemu ndefu ya mwisho ni mchanganyiko wa salt na hash yenyewe.

Salt ni data ya nasibu inayochanganywa kwenye nywila kabla ya hashing kuanza. Kwa sababu salt ni ya kipekee kwa kila mtumiaji, watu wawili wanaochagua "password123" wataishia kuwa na hash tofauti kabisa kwenye hifadhidata yako. Tofauti hii ndogo inazuia rainbow tables—kamusi zilizotayarishwa mapema za hash kwa ajili ya nywila za kawaida—kwa sababu washambuliaji wangehitaji kutengeneza upya jedwali zima kwa kila salt ya kipekee.

Bcrypt pia imekusudiwa kuwa nzito. Vifaa vya kisasa vinaweza kukisia mabilioni ya hash kwa sekunde kwa kutumia algorithm za haraka kama SHA-256. Bcrypt inachelewesha mchakato. Inafanya mchakato wa hashing mara nyingi, ikidhibitiwa na cost factor ambacho unaweza kukiongeza kadiri kompyuta zinavyozidi kuwa na kasi. Ule ucheleweshaji unawapa adhabu yeyote anayejaribu kutumia mbinu ya brute-force kupitia hifadhidata iliyoibiwa. Mtumiaji halali anayesubiri milisekunde mia mbili za ziada wakati wa kuingia hata hatahisi. Mshambuliaji anayejaribu kufanya majaribio ya mamilioni ya kukisia bila shaka ataona.

Jinsi JSON Web Tokens Inavyofanya Kazi

Wakati Bcrypt inashughulikia mlango wa mbele, JWT inashughulikia kibali cha kupita korido. JSON Web Token ni mfululizo wa herufi (string) mfupi na salama kwa URL unaothibitisha kuwa mtumiaji tayari amehakikiwa. Ifikirie kama kitambulisho cha kidijitali ambacho seva inatoa na mteja (client) anacho kubeba.

JWT ina sehemu tatu zilizotenganishwa na nukta: header, payload, na signature. Header huainisha aina ya token na algorithm ya kusaini. Payload hubeba claims—maelezo kuhusu mtumiaji na token yenyewe—kama vile user ID, username, na muda wa mwisho wa kutumika (expiration timestamp). Signature ni muhuri wa kiamatiki (cryptographic seal). Seva inaitengeneza kwa kuencode header na payload, kisha inazipitisha kupitia ufunguo wa siri (secret key). Ikiwa mtu yeyote atabadili payload, signature haitafanana tena, na seva itakataa token hiyo mara moja.