- I-JWT ivumela ukuqinisekiswa okungenasimo, okungalinganiswa kwama-API e-Node.js, okuhlanganiswa kahle ne-Express routes kanye ne-middleware.
- Ukuhlanganisa i-Express, i-Mongoose, i-jsonwebtoken, i-bcrypt, i-Joi kanye ne-dotenv kudala isisekelo esiphephile nesiguquguqukayo sokugeleza kokuqinisekisa komsebenzisi.
- Ukuqinisekiswa kwe-JWT okusekelwe ku-JWKS kuvumela ama-API e-Node.js ukuthi athembe amaseva okugunyazwa kwangaphandle futhi aphoqelele ama-scopes kanye nezimangalo ngendlela ehlanzekile.
- Ukuqinisekiswa okuphelele, ukuphathwa kwamaphutha okucacile kanye nokuhlolwa okuhlelekile kubalulekile ukugcina ama-endpoints avikelwe yi-JWT eqinile.
Uma wakha ama-API nge-Node.js, ukwengeza ubuqiniso obufanele nge-JWT kungenye yezinto ezingase zizizwe ziyesabeka ekuqaleni, kodwa akudingeki kube njalo. Ngenqwaba yemitapo yolwazi ekhethwe kahle, isakhiwo esicacile kanye nemikhuba emihle ezungeze ukuqinisekiswa nokuphepha, ungavikela ama-endpoints akho futhi ugcine i-codebase yakho ihlanzekile futhi inakekelwa.
Kulo mhlahlandlela sizohamba ngendlela yokusebenzisa ukuqinisekiswa okusekelwe ku-JWT ku-Node.js API sisebenzisa i-Express, i-MongoDB namathuluzi afana ne-jsonwebtoken, i-bcrypt, i-Joi kanye ne-dotenv, futhi sizobona nokuthi singawaqinisekisa kanjani amathokheni sisebenzisa i-endpoint ye-JWKS evela ku-Authorization Server ezimweni ezigxile kakhulu ebhizinisini. Uzofunda ukuthi ungaklama kanjani isakhiwo sephrojekthi, udale amamodeli nemizila, ukhiqize futhi uqinisekise amathokheni, ungeze i-auth middleware bese uhlanganisa yonke into ndawonye ukuze abasebenzisi abaqinisekisiwe kuphela bakwazi ukufinyelela izinsiza ezivikelwe.
Lokho Okulethwa Yi-JSON Web Tokens (JWT) Kuma-API Akho E-Node.js
Ama-JSON Web Tokens (JWT) angama-tokens amancane, aphephile nge-URL aphethe isethi yezimangalo futhi avumela amaqembu amabili ukushintshana ngolwazi oluqinisekisiwe ngaphandle kokugcina isimo seseshini eseceleni kweseva. Kumongo we-Node.js API lokhu kusho ukuthi uma umsebenzisi engena ngemvume futhi ukhipha i-JWT, isicelo ngasinye esilandelayo singaqinisekiswa yi-backend yakho kusetshenziswa kuphela ithokheni uqobo kanye nokhiye oyimfihlo noma womphakathi, okhula kangcono kakhulu kunezikhathi zeseva zendabuko.
I-JWT ejwayelekile yakhiwe izingxenye ezintathu: i-header, i-payload kanye nesiginesha, konke kubhalwe ngekhodi futhi kuhlukaniswe ngamachashazi, isibonelo xxxxx.yyyyy.zzzzz. Isihloko sivame ukucacisa i-algorithm kanye nohlobo lwethokheni, umthwalo okhokhelwayo uqukethe izimangalo ezihlobene nomsebenzisi njenge-ID, izindima noma izimvume, futhi isiginesha siqinisekisa ubuqotho ukuze ithokheni ingaphazanyiswa ingatholakali.
Uma usebenzisa i-JWT kuma-API e-Node.js, uvame ukusebenzisa ithokheni njengethokheni lokuthwala ku- Authorization Isihloko se-HTTP, njenge Authorization: Bearer <token>, bese uyichaza bese uyiqinisekisa ngaphakathi kwe-Express middleware yakho noma kubaphathi bemizila. Uma ithokheni isebenza, unganamathisela umthwalo okhokhelwayo oqoshwe entweni yesicelo bese uyisebenzisela izinqumo zokugunyazwa noma ukwenza impendulo ibe ngeyakho.
Esinye isici esinamandla sama-JWT ukuthi awakholelwa kakhulu kulimi futhi asekelwa kabanzi kuzo zonke izindawo zemvelo, okwenza abe ukukhetha okuhle kakhulu kokuvikela ama-API asetshenziswa yi-React, i-Vue, izinhlelo zokusebenza zeselula noma yiliphi iklayenti lesithathu. Kuhlanganiswe nokuqinisekiswa okuqinile kanye nokuphathwa kokhiye okufanele, bavumela izinsizakalo ze-Node.js ukuthi zihlanganyele kahle ku-OAuth 2.0 kanye nokwakhiwa okusekelwe ku-OpenID Connect.
Ukubuka Konke Kwephrojekthi: I-Node.js API Enokuqinisekiswa kwe-JWT
Ake sicabange nge-Node.js API elula kodwa engokoqobo lapho abasebenzisi bangabhalisa, bangene ngemvume futhi bafinyelele ama-endpoints avikelwe kuphela ngemva kokwethula i-JWT evumelekile. Sizothembela ku-Express ukuze siqondise, i-Mongoose ukuze ihlanganiswe ne-MongoDB, i-jsonwebtoken ukuze idale futhi iqinisekise amathokheni, i-bcrypt ukuze kuqinisekiswe iphasiwedi evikelekile, i-Joi ukuze kuqinisekiswe okokufaka kanye ne-dotenv yokuphathwa kokucushwa.
Ukuhlelwa kwefolda ehlanzekile kusiza ukugcina izinto ziqondakala njengoba iphrojekthi ikhula, ngakho esikhundleni sokufaka konke kufayela elilodwa sizochaza isakhiwo esiyisisekelo esinamamojula ahlukene okucushwa, isizindalwazi, amamodeli, imizila kanye ne-middleware. Le ndlela ye-modular yenza kube lula ukuhlola izingxenye ezithile zokugeleza kokuqinisekisa.
Ezingeni eliphezulu, i-API izodalula isethi yama-REST endpoints okubhaliswa komsebenzisi nokungena ngemvume, kanye nomthombo okungenani owodwa ovikelwe ongafinyelelwa kuphela nge-JWT evumelekile kuma-header esicelo. Endleleni sizobona ukuthi singaqinisekisa kanjani ukulayisha okukhokhelwayo kwesicelo, i-hash kanye nokuqhathanisa amaphasiwedi, sikhiqize amathokheni afaka i-ID yomsebenzisi futhi sihlanganise i-auth middleware ehlola amathokheni kumakholi angenayo.
Iphethini efanayo inganwetshwa ezinhlelweni eziyinkimbinkimbi kakhulu, kufaka phakathi lezo ezihlanganiswa neSeva Yokugunyazwa yangaphandle futhi zisebenzisa ama-endpoint e-JWKS ukuqinisekisa amathokheni okufinyelela angenayo avela kumakhasimende e-OAuth 2.0. Leso simo sesibili sivame kakhulu uma unikeza ubuqiniso kubahlinzeki bobunikazi noma udinga ukusekela ukungena ngemvume okukodwa kumasevisi amaningi.
Ngaphambi kokuthi singene ezinkingeni zokuqaliswa, ake sichaze izingxenye ezibalulekile zemvelo esizothembela kuzo nokuthi kungani ukuncika ngakunye kubalulekile ekusingathweni okuphephile kwe-JWT ku-Node.js.
Ukuthembela Okuyinhloko Kokuqinisekiswa kwe-JWT Ku-Node.js
I-Express iyinsika yama-API amaningi e-Node.js, enikeza uhlaka oluncane kodwa oluguquguqukayo lokuqondisa, i-middleware kanye nokuphathwa kwe-HTTP. Esimweni sethu, i-Express izosebenza njengeplatifomu lapho sibhalisa khona imizila efana /api/users or /api/auth, kanye nalapho sixhuma khona i-middleware yokuqinisekisa ye-JWT evikela ama-endpoint abucayi.
I-Mongoose iyilabhulali ye-Object Data Modeling (ODM) eyenza kube lula ukusebenzisana ne-MongoDB ngama-schema namamodeli, esikhundleni sokusebenza ngemibuzo engahleliwe ngqo. Sizoyisebenzisa ukuchaza User imodeli enezakhiwo ezifana negama, i-imeyili nephasiwedi, kanye nokuqhubeka noma ukuthola la madokhumenti kusuka kudathabheyisi ngendlela ephephile.
The jsonwebtoken umtapo wolwazi uyindlela ejwayelekile ku-Node.js yokudala nokuqinisekisa ama-JWT kusetshenziswa ukhiye oyimfihlo noma womphakathi. Ngesikhathi sokungena ngemvume sizosayina ithokheni efaka i-ID yomsebenzisi (kanye nanoma yiziphi ezinye izimangalo esizidingayo), futhi kamuva sizoqinisekisa leyo thokheni ezindleleni ezivikelwe, senqabe noma yisiphi isicelo esiphethe ithokheni engavumelekile, engakhi kahle noma ephelelwe yisikhathi.
Ukuze kuvikelwe iphasiwedi, i-bcrypt isetshenziselwa ukufaka amaphasiwedi ombhalo ocacile ngaphambi kokugcina kanye nokuqhathanisa iziqinisekiso ezinikeziwe namanani asheshayo ngesikhathi sokuqinisekisa. Lokhu kubalulekile, ngoba ukugcina amaphasiwedi angahluziwe noma ukusebenzisa amasu e-hashing abuthakathaka kuveza abasebenzisi bakho ezingozini ezinkulu uma kwenzeka ukuvuza kwesizindalwazi, kuyilapho i-bcrypt inikeza ikhambi eliqinisekisiwe nelivivinywe yimpi.
UJoi udlala indima enkulu ekuqinisekiseni idatha engenayo emngceleni we-API, echaza ama-schema ezinto futhi ehlola ukuthi umthwalo ngamunye wesicelo usebenza njengoba kulindelekile. Isibonelo, singachaza ukuthi i-imeyili kumele ifomethwe kahle, ukuthi iphasiwedi inobude obuncane nokuthi izinkambu ezithile ziyimpoqo, okunciphisa kakhulu amathuba okufakwa okubi noma okunonya ku-logic yethu.
Okokugcina, i-dotenv isivumela ukuthi silayishe izinto eziguquguqukayo zemvelo kusuka ku- .env ifayela, ligcina izimfihlo ezifana nezihluthulelo zokusayina ze-JWT, ama-URL esizindalwazi noma izilungiselelo zokucushwa ngaphandle kwekhodi yomthombo. Lokhu kusiza ukugwema amanani abucayi okubhala ikhodi, futhi kukhuthaza ukuhlukaniswa okungcono phakathi kokuthuthukiswa, ukuhlelwa kwesiteji kanye nokuhlelwa kokukhiqiza.
Ukusetha Iseva Esheshayo Nemvelo
Indawo yokungena ye-API yethu ivame ukuba yi- index.js ifayela lapho siqala khona i-Express, sibhalisa i-middleware bese sifaka izincazelo zethu zomzila. Kuleli fayela sizodinga ukucushwa kwesizindalwazi sethu, amamojula ethu omzila kanye nanoma iyiphi i-middleware yomhlaba wonke njenge-JSON body parsing noma i-CORS.
Ngemva nje kokulayisha izinto ezixhomeke kuzo, kungumqondo omuhle ukushayela ucingo require("dotenv").config() ngakho-ke imvelo iyashintshashintsha kusukela ku- .env ifayela litholakala nge- process.env. Lokhu kufaka phakathi okhiye abanjengo JWT_PRIVATE_KEY, MONGO_URI noma i-port lapho iseva izolalela khona, okugcina ukucushwa kuguquguquka futhi kuphephile.
Uhlelo lokusebenza lwe-Express ngokwalo luzosebenzisa ngokuvamile app.use(express.json()) ukuhlaziya imizimba yesicelo se-JSON futhi kuzofaka ama-router eziqalo ezithile ze-URL, njenge app.use("/api/users", usersRouter) futhi app.use("/api/auth", authRouter). Lokhu kuhlukaniswa kugcina imizila ehlobene nokuqinisekiswa kanye nezinkinga zokuphathwa komsebenzisi zihlukaniswe kwezinye izingxenye ze-API.
Njengoba imvelo ihlelwe futhi i-Express isebenza, ingxenye elandelayo ukuxhuma isizindalwazi se-MongoDB ngemodyuli ezinikele, ngokuvamile i- db.js ifayela, lapho sisetha khona i-logic yokuxhumeka.
Ukucushwa kwe-MongoDB nge-Mongoose
In the db.js imodyuli, sivame ukungenisa iMongoose bese sishayela ucingo mongoose.connect() ngentambo yokuxhuma ye-MongoDB egcinwe ku-environment variable. Singakwazi futhi ukumisa izinketho ezifana nokuzama kabusha i-logic, i-united topology noma ukuhlanganisa uxhumano ukuqinisekisa ukuziphatha okuzinzile ezindaweni zokukhiqiza.
Kuvamile ukufaka umlayezo lapho uxhumano luphumelela futhi uphathe amaphutha kahle ukuze uma i-MongoDB ingafinyeleleki, i-API iqale ngokuxilongwa okucacile. Kuhlelo lokusebenza oluphelele, ungase ukhethe ukuphuma kule nqubo uma uxhumano lwedatha luhluleka, njengoba imizila eminingi incike kulo.
Once the db.js ifayela seliqalisiwe, silingenisa kusuka ku- index.js bese uyishayela kusenesikhathi ngesikhathi sokuqalisa uhlelo lokusebenza, uqinisekisa ukuthi i-API yethu ixhunywe kusizindalwazi ngaphambi kokucubungula noma yisiphi isicelo. Lokhu kuhlukaniswa kugcina ukucushwa kuhlukanisiwe futhi kungasetshenziswa kabusha, kuyilapho index.js isagxile ezinkingeni ze-Express.
Njengoba isizindalwazi sixhunyiwe, singaqhubeka nokwenza amamodeli edatha eqhuba uhlelo lwethu lokufakazela ubuqiniso, oluqala ngencazelo yeskimu somsebenzisi kanye nemodeli.
Ukwakha Imodeli Yomsebenzisi Ngokusekelwa kwe-JWT
The User imodeli, evame ukufakwa /models/user.js, ichaza isakhiwo samadokhumenti omsebenzisi agcinwe ku-MongoDB futhi ihlanganisa ukuziphatha okuhlobene nokuqinisekiswa. Okungenani, sizofaka izakhiwo ezifana name, email futhi password, futhi singase sengeze izitembu zesikhathi, izindima noma eminye imethadatha uma kudingeka.
Iphethini evamile ukumaka insimu ye-imeyili njengehlukile futhi edingekayo, ukuqinisekisa ukuthi abekho abasebenzisi ababili abangabhalisa ngekheli le-imeyili elifanayo. Ngokufanayo, insimu yephasiwedi ngeke igcine inani lombhalo elilula; kunalokho, sizogcina i-hash ye-bcrypt ekhiqizwe ngesikhathi sokubhalisa noma lapho umsebenzisi ebuyekeza iziqinisekiso zakhe.
Isinqumo sokuklama esithakazelisayo nesisebenziseka kakhulu ukwengeza indlela ku-schema yomsebenzisi yokukhiqiza ama-JWT, athatha i-ID yomsebenzisi njengomthwalo okhokhelwayo bese eyisayina ngokhiye oyimfihlo ochazwe endaweni ezungezile. Le ndlela ingabizwa ngesikhathi sokungena ngemvume ukuze kukhiqizwe ithokheni ethile kulowo msebenzisi, futhi igcina i-logic yokukhiqiza amathokheni isendaweni efanayo nemodeli ephethe idatha yobunikazi.
Ngokubambisana nabasizi bokuqinisekisa abasekelwe ku-Joi, imodeli yomsebenzisi iba yingxenye ebalulekile yakho konke okuhlobene nobunikazi: ukuchaza isimo sedatha yomsebenzisi, ukuqinisekisa imithwalo engenayo kanye nokukhiqiza amathokheni asetshenziswa yi-API yonke.
Kusukela lapha, singakwazi ukusebenzisa izindlela ezibhekene nokubhalisa ama-akhawunti amasha nokuqinisekisa abasebenzisi abakhona, sisebenzisa imodeli yomsebenzisi, i-bcrypt kanye ne-Joi ndawonye.
Ukudala Umzila Wokubhalisa
I-logic yokubhalisa ivame ukuhlala kumojuli yomzila efana /routes/users.js, lapho sichaza khona indawo yokugcina efana nokuthi POST /api/users ukusingatha izicelo zokubhalisa ezingenayo. Lo mzila uzoqinisekisa umthwalo okhokhelwayo usebenzisa i-Joi, uhlole ukuthi i-imeyili isivele isetshenziswa yini, ubhale iphasiwedi, udale umsebenzisi bese uyigcina kusizindalwazi.
Ngaphambi kokuqhubeka nanoma yini, singasebenzisa i-schema ye-Joi eqinisekisa izidingo ezifana negama eliyimpoqo kanye ne-imeyili, ifomethi efanele ye-imeyili kanye nobude obuncane bephasiwedi. Uma ukuqinisekiswa kwehluleka, umzila uphendula ngekhodi yesimo sephutha kanye nomyalezo ofanele, ukuvimbela idatha engafanele ukuthi ifinyelele ekuqondeni kwebhizinisi.
Uma i-imeyili ingekho kakade, sikhiqiza i-bcrypt salt bese sifaka iphasiwedi esikhundleni sayo, sithathe indawo yephasiwedi eluhlaza ngenguqulo yayo efakwe ku-user object. Leli nani eli-hashed yilokho ekugcineni eligcinwa ku-MongoDB, okunciphisa kakhulu umthelela wokwephulwa kwedatha okungenzeka.
Ngemva kokulondoloza umsebenzisi omusha, ezinye izinhlelo zokusebenza zikhetha ukukhiqiza i-JWT ngokushesha bese ziyibuyisela esihlokweni sempendulo noma emzimbeni, ukuze umsebenzisi abhekwe njengoqinisekisiwe ngemuva nje kokubhaliswa. Amanye ama-API angadinga isinyathelo sokungena esihlukile, kuye ngezidingo zokuphepha zesistimu.
Uma ukubhaliswa sekukhona, indlela ehambisanayo yokungena ingasebenzisa kabusha iningi lendlela efanayo yokuqinisekisa ngenkathi igxile ekuqinisekiseni iziqinisekiso nokukhipha amathokheni.
Ukusebenzisa Indlela Yokungena Nokukhiqiza Amathokheni
Ukugeleza kokungena ngemvume kuvame ukuphathwa ku- /routes/auth.js, enephuzu lokugcina elifana POST /api/auth othola i-imeyili nephasiwedi emzimbeni wesicelo. Lo mzila usebenzisa i-Joi futhi ukuqinisekisa ukuthi zombili izinkambu zikhona futhi zihlelwe kahle ngaphambi kokuzama ukuqinisekisa umsebenzisi.
Ngemva kokuqinisekiswa, umzila ubuza isizindalwazi somsebenzisi nge-imeyili enikeziwe, futhi uma uyithola, usebenzisa i-bcrypt ukuqhathanisa iphasiwedi enikeziwe ne-hash egciniwe. Uma ukuqhathanisa kwehluleka, isicelo siyenqatshwa ngomyalezo wephutha ofanele; ngaphandle kwalokho, siqhubekela ekukhishweni kwamathokheni.
Ngesikhathi sokuqinisekiswa okuphumelelayo, sibiza indlela yokukhiqiza amathokheni echazwe kumodeli yomsebenzisi, edala i-JWT efaka isihlonzi somsebenzisi (futhi mhlawumbe nezinye izimangalo) bese iyisayina ngokhiye oyimfihlo. Leli thokheni lingathunyelwa kuklayenti, ngokuvamile emzimbeni wempendulo noma esihlokweni esenziwe ngokwezifiso, lapho i-frontend noma umthengi wangaphandle egcina khona futhi ayisebenzise kabusha izicelo zesikhathi esizayo.
Ngokombono weklayenti, yonke izingcingo ezilandelayo eziya kuma-endpoints avikelwe zizofaka le JWT ku Authorization i-header njengethokheni lokuthwala, okuyilokho kanye i-middleware yethu ezokufuna. Ngasohlangothini lweseva, ukuba ne-auth middleware ezinikele kuqinisekisa ukuthi asiphindi i-logic yokuqinisekisa amathokheni kuyo yonke imizila.
Ngaphambi kokucwila kuleyo middleware, kubalulekile ukuqaphela ukuthi le ndlela efanayo ihlangana kahle ne-React noma ezinye izinhlaka ze-SPA, lapho ukugeleza okusekelwe ku-JWT kuvame ukusetshenziswa kokubili kwezidingo zokuqinisekisa kanye nokugunyazwa okulula.
Ukwakha i-Auth Middleware Ukuvikela Imizila
I-auth middleware, evame ukusetshenziswa ku /middleware/auth.js, usebenza njengomlindi wesango wanoma yimuphi umzila odinga ukuqinisekiswa, evimba izicelo ngaphambi kokuba zifike kumphathi womzila. Umsebenzi wayo oyinhloko ukufunda i-JWT kusukela ku- Authorization cindezela i-header, uyiqinisekise bese ufaka umthwalo okhokhelwayo oqoshwe entweni yesicelo ukuze uyisebenzise kamuva.
I-middleware iqala ngokuhlola ukuthi Authorization i-header ikhona futhi ilandela okulindelekile Bearer <token> ifomethi; uma ithokheni ingekho noma ingalungile, iphendula ngokushesha ngekhodi yesimo engagunyaziwe. Lokhu kuqinisekisa ukuthi izicelo ezingavikelekile azisheleli ngengozi ezindaweni zokugcina ezivikelekile.
Uma kukhona ithokheni, i-middleware iyabiza jwt.verify() (ukusuka jsonwebtoken umtapo wolwazi), ukudlulisa ithokheni kanye nesihluthulelo esiyimfihlo noma somphakathi esisetshenziselwa ukusayina. Uma ukuqinisekiswa kwehluleka ngenxa yokuphelelwa yisikhathi, ukungafani kwesiginesha noma olunye udaba, i-middleware iphendula ngephutha; ngaphandle kwalokho, ibamba umthwalo okhokhelwayo oqoshwe phansi.
Ukuqaliswa okuningi kufaka lokhu kulayisha okuhleliwe ku- req.user noma impahla efanayo, ukuze abaphathi bemizila engezansi bakwazi ukufinyelela izimangalo ezihlobene nomsebenzisi ngaphandle kokudinga ukuhlaziya kabusha noma ukuqinisekisa kabusha ithokheni. Ekugcineni, izingcingo ze-middleware next() ukudlulisa ukulawula emsebenzini olandelayo kuphayiphi ye-Express.
Ngokuhlanganisa le middleware nezincazelo zemizila, singamaka kalula amanye ama-endpoints njengomphakathi kanti amanye njengavikelwe ngokumane singeze i-middleware kuchungechunge lokuphatha izicelo zalezo mizila.
Ukufinyelela Izinsiza Ezivikelwe Nge-JWT
Icala elivamile lokusetshenziswa ngemva kokusebenzisa ubuqiniso ukuhlinzeka ngomzila olanda iphrofayela yomsebenzisi yamanje noma uhlu lwabasebenzisi, olutholakala kuphela kubafonayo abanikeza ithokheni evumelekile. Isibonelo, ku /routes/users.js, kungase kube khona GET /api/users/me iphuzu lokugcina elibuyisela ulwazi mayelana nomsebenzisi ongene ngemvume.
Ukuze sivikele lo mzila, sinamathisela i-auth middleware ukuze noma yisiphi isicelo esifika kuyo sibe ne-JWT evumelekile; ngaphandle kwalokho, i-middleware izoqeda isicelo ngaphambi kokuba umphathi wangempela aqalise ukusebenza. Ngoba umthwalo okhokhelwayo oqoshwe kakade usunamathiselwe ku- req.user, umphathi angathola i-ID yomsebenzisi ngqo kusuka kuthokheni bese ebuza ngedathabheyisi ngokufanele.
Le ndlela iqinisekisa ukuthi i-business logic ayinandaba nokuthi ukuqinisekiswa kwenziwe kanjani; imane ithembe ukuba khona komthwalo oqinisekisiwe futhi igxile ekulandeni noma ekushintsheni idatha yesizinda. Kumasethingi athuthukile kakhulu, ungashumeka nezindima, izimvume noma izikophu ngaphakathi kwethokheni bese uzisebenzisa ukushayela ukuhlolwa kokugunyazwa kubaphathi.
Ngokombono wabathengi, umuntu oshaya ucingo uzoqala ashaye i-endpoint yokungena ngemvume ukuze athole ithokheni bese elifaka ezicelweni ezilandelayo zala ma-endpoint avikelwe, ngokuvamile avela ku-SPA efana ne-React, uhlelo lokusebenza lweselula noma ukuhlanganiswa kwe-backend-to-backend. Okuhlangenwe nakho konke kuhamba kahle uma imiyalezo yamaphutha icacile lapho ithokheni isiphelelwe yisikhathi noma ingavumelekile.
Kuleli qophelo sesihlanganise ukusethwa kwe-JWT okuzimele sisebenzisa imfihlo egcinwe ku- .env ifayela, kodwa izinhlelo eziningi zokukhiqiza nazo zihlangana namaSeva okuGunyazwa kwangaphandle futhi zisebenzisa ama-endpoint e-JWKS ukuqinisekisa amathokheni; yilapho i-Express middleware yama-API avikelekile e-OAuth eqala khona ukusebenza.
Ukusebenzisa i-JWKS Endpoint ukuqinisekisa ama-JWT ku-Node.js
Kuma-architecture athuthukile kakhulu, ikakhulukazi lawo athembele ku-OAuth 2.0 kanye ne-OpenID Connect, ama-API e-Node.js avame ukuthola amathokheni okufinyelela akhishwa yi-External Authorization Server esikhundleni sokukhiqiza ama-JWT ngokwawo. Kulesi simo, i-API kumele iqinisekise amathokheni asayinwe ngokhiye abangalingani, ngokuvamile i-RSA noma i-EC, lapho i-Authorization Server kuphela ephethe ukhiye wangasese.
Isixazululo esivamile ukusebenzisa umtapo we-Express middleware olanda ama-JSON Web Key Sets (JWKS) kusuka endaweni yokugcina elungiselelwe evezwe yi-Authorization Server. Leyo ndawo yokugcina ye-JWKS iveza okhiye bomphakathi ngefomethi ejwayelekile, ivumela i-API ukuthi iqinisekise amasignesha e-JWT angenayo ngaphandle kokuphatha okhiye abayimfihlo.
Isibonelo, ungafaka iphakheji efana ne- express-oauth-jwt futhi uyilungiselele nge-URL ye-JWKS, njenge https://idsvr.example.com/oauth/v2/oauth-anonymous/jwks, bese uxhuma i-middleware emizileni yakho ye-Node.js API. Uma isihlanganisiwe, i-middleware iphatha ngokuzenzakalelayo iningi lemisebenzi yokuqinisekisa amathokheni esezingeni eliphansi.
Njengoba lokho kulungiselelwa kusendaweni, umtapo wolwazi ubheka kid (i-key ID) kusuka ku-header ye-JWT, ilanda ukhiye womphakathi ofanele kusuka ku-endpoint ye-JWKS (uma ingakafakwanga ku-cache) bese iqinisekisa isiginesha isebenzisa lowo khiye. Iphinde ihlole ukuphelelwa yisikhathi kwethokheni, umkhiphi, izithameli kanye nezinye izinkambu ezijwayelekile, kuye ngokuthi uzilungiselela kanjani izinketho zayo.
Ngemva kokuqinisekiswa okuphumelelayo, i-JWT ehlolisisiwe kanye nezimangalo zayo ziyatholakala ku-Express request into, okuvumela abaphathi bakho ukuthi bahlole izikophu, izihlonzi zomsebenzisi noma izimfanelo ezenziwe ngokwezifiso ngezinjongo zokugunyazwa kanye nokubhalisa. Uma kukhona okungahambi kahle (isibonelo, ithokheni seliphelelwe yisikhathi noma isiginesha ayifani), i-middleware iphendula ngamakhodi ephutha e-HTTP afanele futhi ifaka isizathu ku- WWW-Authenticate ikhanda.
Izikophu, Izimangalo kanye ne-Logic Yokugunyazwa Ku-API Yakho
Uma i-Node.js API yakho ithembe i-JWT, kungaba ngoba iyisayine ngqo noma ngoba i-middleware esekelwe ku-JWKS iyiqinisekisile, isinyathelo esilandelayo ukusebenzisa izimangalo zayo kanye nezinhlelo zayo ukuze kuqaliswe ukugunyazwa. Yilapho udlulela ngale kokuqinisekisa okulula bese uqala ukunikeza noma ukwenqaba ukufinyelela ngokusekelwe kulokho umsebenzisi avunyelwe ukukwenza.
Ama-scope ngokuvamile amelela izimvume eziqinile, njengokuthi read:users or write:orders, futhi ngokuvamile zifakwa kuma-JWT ngaphansi kwesimangalo esifana nalesi scope or scopes. I-API ingahlola ukuthi ngabe ububanzi obudingekayo bukhona yini ngaphambi kokucubungula isicelo esithinta idatha ethile yebhizinisi, ibuyisele impendulo engavunyelwe uma ingekho.
Ngokufanayo, izimangalo ezifana ne-ID yomsebenzisi, i-imeyili, indima noma ulwazi lomqashi zikuvumela ukuthi usebenzise imithetho ecacile; isibonelo, ukuqinisekisa ukuthi abasebenzisi bafinyelela amarekhodi abo kuphela noma bakhawulele izenzo zokuphatha ezindimeni ezithile. Ku-Express, kulula ukubhala ama-middleware enziwe ngokwezifiso ahlola lezi zimangalo ku- req.user futhi usebenzise ukuhlolwa kwenqubomgomo.
Amanye amalabhulali okuqinisekisa e-JWT e-Express anikeza ama-hook akhelwe ngaphakathi ukuhlola ama-scope adingekayo njengengxenye yezinketho zawo, okwenza kube lula ukuhlanganisa umzila ngamunye noma i-router nesethi ethile yemvume. Le ndlela igcina izinkinga zokugunyazwa eduze kwezincazelo zendlela, okuthuthukisa ukufundeka kanye nokugcinwa kwayo.
Ngokombono wokuklama, ngokuvamile kungcono ukuphatha izikophu ze-JWT kanye nezimangalo njengengxenye yenqubomgomo yokumemezela, kunokusabalalisa izintambo eziqinile kuyo yonke ikhodi yakho, ukuze ugweme ukungahambisani futhi unciphise izinguquko zesikhathi esizayo kumodeli yakho yokuphepha.
Ukuhlola Nokuxazulula Izinkinga Ama-API e-JWT-Protected Node.js
Uma konke sekuhlanganisiwe, kuzodingeka uhlole ukushayela i-Node.js API yakho ngama-JWT asebenzayo nangaphandle kwawo ukuqinisekisa ukuthi ukulawula ukufinyelela kusebenza njengoba bekulindelekile. Amathuluzi alula njenge-curl, i-HTTPie noma i-Postman aphelele kulokhu, akuvumela ukuthi usethe ama-header kanye nemithwalo yokulayisha kalula.
Ukugeleza okuvamile kokuhlola kuhilela ukubiza kuqala indawo yokungena ukuze uthole ithokheni bese uthumela isicelo sesibili emzileni ovikelwe nge- Authorization: Bearer <token> isethi yekhanda. Uma ukusetshenziswa kwakho kulungile, izicelo ezigunyaziwe kufanele ziphumelele kuyilapho izingcingo ezingenazo amathokheni noma ezinamathokheni angavumelekile kufanele zenqatshwe.
Uma usebenzisa umtapo wolwazi wokuqinisekisa we-Express JWT ohlanganiswe ne-endpoint ye-JWKS, noma iyiphi inkinga ngethokheni ivame ukusayinwa nge- 401 Unauthorized impendulo kanye nolwazi oluningiliziwe ku- WWW-Authenticate isihloko sempendulo. Isibonelo, uma ithokheni yokufinyelela iphelelwe yisikhathi, leyo nhloko ivame ukukhombisa ikhodi yephutha kanye nencazelo ethile.
Le miyalezo yamaphutha enemininingwane iyasiza kakhulu ngesikhathi sokuthuthukiswa nokulungiswa kwamaphutha, kodwa kufanele uqaphele ukuthi ungavuzi ulwazi lwangaphakathi olubucayi kakhulu kumalogi okukhiqiza noma izimpendulo. Ngokuvamile kungumqondo omuhle ukufaka phakathi ukuqopha nokufihla noma ukufaka imiyalezo ethile ndawonye ngenkathi kugcinwa umongo owanele ukuze opharetha bakwazi ukuxilonga izinkinga.
Ukuhlolwa okuzenzakalelayo kanye nama-JWT ahlekisayo kungakhulisa ukuzethemba kwakho, kukuvumela ukuthi uqinisekise ukuthi ukuziphatha kokugunyazwa kuzinzile uma ushintsha imizila, ungeza ama-scope noma i-refactor middleware logic.
Uma konke lokhu kuhlanganiswa, i-Node.js API ehlanganisa i-Express, i-MongoDB, i-bcrypt, i-Joi kanye ne-JWT—ngokuzithandela isekelwa umtapo wolwazi wokuqinisekisa osekelwe ku-JWKS—ikunikeza isisekelo esiqinile sokuvikela ama-endpoints ngenkathi uhlala uguquguqukayo ngokwanele ukuhlanganiswa nezinhlaka zesimanje ze-frontend, izinhlelo zokusebenza zeselula kanye nabahlinzeki bobunikazi bebhizinisi.