Xidhiidhka Aqoonsiga Furan: oggolaanshaha codsiyada gudaha laga bilaabo caadada ilaa heerka

Dhawr bilood ka hor, waxaan hirgelinayay adeegaha OpenID Connect si aan u maareeyo gelitaanka boqolaalka codsiyadeena gudaha. Laga soo bilaabo horumarkeena, ku habboon miisaan yar, waxaan u guurnay heer guud ahaan la aqbali karo. Helitaanka adeegga dhexe waxay si weyn u fududaynaysaa hawlgallada keli-taliska ah, waxay yaraynaysaa kharashka fulinta oggolaanshaha, waxay kuu oggolaanaysaa inaad hesho xalal badan oo diyaarsan oo aanad maskaxdaada ka saarin markaad horumarinayso kuwa cusub. Maqaalkan, waxaan kaga hadli doonaa kala guurkan iyo kuuskuuskii aanu ku guulaysanay inaanu buuxino.

Xidhiidhka Aqoonsiga Furan: oggolaanshaha codsiyada gudaha laga bilaabo caadada ilaa heerka

Waa hore ka hor... Siday wax u wada bilowdeen

Dhowr sano ka hor, markii ay jireen codsiyo badan oo gudaha ah oo loogu talagalay xakameynta gacanta, waxaan qornay codsi lagu xakameynayo gelitaanka shirkadda dhexdeeda. Waxay ahayd codsi fudud oo tareennada ah oo ku xidhan xog-ururin macluumaad ku saabsan shaqaalaha, halkaas oo gelitaanka hawlo kala duwan loo habeeyey. Isla mar ahaantaana, waxaan kor u qaadnay SSO-gii ugu horreeyay, kaas oo ku saleysan xaqiijinta calaamadaha dhinaca macmiilka iyo server-ka oggolaanshaha, calaamadda waxaa lagu gudbiyay qaab qarsoodi ah oo leh dhowr cabbir waxaana lagu xaqiijiyay server-ka oggolaanshaha. Tani ma ahayn ikhtiyaarka ugu habboon, maadaama codsi kasta oo gudaha ahi uu ku qasbanaaday inuu qeexo lakab macquul ah oo macquul ah, iyo xog ururinta shaqaalaha ayaa si buuxda ula mid noqday adeegaha oggolaanshaha.

Muddo ka dib, waxaan go'aansanay inaan fududeyno hawsha oggolaanshaha dhexe. SSO waxaa lagu wareejiyay dheelitiriyaha. Iyada oo la kaashanayo OpenResty, template ayaa lagu daray Lua kaas oo hubiyay calaamadaha, ogaada codsiga codsigu u socdo, oo hubin kara haddii ay jirto gelitaanka halkaas. Habkani wuxuu si weyn u fududeeyay hawsha xakamaynta gelitaanka codsiyada gudaha - koodhka codsi kasta, ma ahayn lagama maarmaan in la qeexo caqli-gal dheeraad ah. Natiijo ahaan, waxaan xirnay taraafikada dibadda, codsiga laftiisa ma uusan ogeyn wax ku saabsan oggolaanshaha.

Si kastaba ha ahaatee, hal dhibaato ayaa weli ah mid aan la xallin. Ka warran codsiyada u baahan macluumaadka shaqaalaha? Waxaa suurtagal ahayd in API loogu qoro adeegga oggolaanshaha, laakiin markaa waa inaad ku darto macquul dheeraad ah codsi kasta oo noocaas ah. Intaa waxaa dheer, waxaan rabnay inaan ka takhalusno ku-tiirsanaanta mid ka mid ah codsiyadayada is-qorista, ee ku jihaysan mustaqbalka turjumaadda OpenSource, ee serfarka oggolaanshaha gudaha. Mar kale ayaan ka hadli doonaa. Xalka labada dhibaato waxa uu ahaa OAuth.

heerarka caadiga ah

OAuth waa halbeeg la fahmi karo, oo guud ahaan la aqbali karo, laakiin maadaama oo kaliya shaqadeeda kuma filna, isla markiiba waxay bilaabeen inay tixgeliyaan OpenID Connect (OIDC). OIDC lafteedu waa hirgalinta saddexaad ee heerka aqoonsiga furan, kaas oo ku soo qulqulay wax-ka-kordhinta borotokoolka OAuth 2.0 (Borotokoolka ogolaanshaha furan). Xalkani wuxuu xirayaa dhibaatada xog la'aanta ku saabsan isticmaalaha ugu dambeeya, wuxuuna sidoo kale suurtogal ka dhigayaa in la beddelo bixiyaha oggolaanshaha.

Si kastaba ha ahaatee, ma aanaan dooran bixiye gaar ah waxaana go'aansanay inaan ku darno la shaqaynta OIDC ee adeegaha ogolaanshaha ee jira. Taageerada go'aankan waxay ahayd xaqiiqda ah in OIDC ay aad u jilicsan tahay marka la eego oggolaanshaha isticmaalaha dhammaadka. Sidaas darteed, waxaa suurtogal ahayd in lagu hirgeliyo taageerada OIDC serfarka oggolaanshahaaga hadda.

Xidhiidhka Aqoonsiga Furan: oggolaanshaha codsiyada gudaha laga bilaabo caadada ilaa heerka

Qaabkayaga loo hirgelinayo server-kayaga OIDC

1) Keenay xogta qaabkii la rabay

Si loo mideeyo OIDC, waa lagama maarmaan in la keeno xogta isticmaale ee hadda qaab la fahmi karo heerka caadiga ah. Gudaha OIDC tan waxaa lagu magacaabaa Sheegashada. Dacwooyinku asal ahaan waa meelaha ugu dambeeya ee xogta macluumaadka isticmaalaha (magaca, iimaylka, taleefanka, iwm.). Jira liiska caadiga ah ee stamps, iyo wax kasta oo aan liiskan ku jirin waxaa loo arkaa caado. Sidaa darteed, qodobka ugu horreeya ee aad u baahan tahay inaad fiiro gaar ah u yeelato haddii aad rabto inaad doorato bixiye OIDC ah oo jira waa suurtogalnimada beddelka habboon ee noocyada cusub.

Kooxda astaamaha lagu garto ayaa lagu daray qeybta hoose ee soo socota - Baaxadda. Inta lagu jiro oggolaanshaha, gelitaanka lama codsado magacyo gaar ah, laakiin si baaxad leh, xitaa haddii qaar ka mid ah noocyada baaxadda aan loo baahnayn.

2) Dhaqangelinta deeqihii loo baahnaa

Qaybta xigta ee isdhexgalka OIDC waa xulashada iyo hirgelinta noocyada oggolaanshaha, waxa loogu yeero deeqaha. Xaaladda dheeraadka ah ee isdhexgalka ka dhexeeya codsiga la doortay iyo adeegaha oggolaanshaha waxay ku xirnaan doontaa deeqda la doortay. Nidaam ku dayasho leh oo lagu dooranayo deeqda saxda ah ayaa lagu muujiyay sawirka hoose.

Xidhiidhka Aqoonsiga Furan: oggolaanshaha codsiyada gudaha laga bilaabo caadada ilaa heerka

Codsigeenii ugu horreeyay, waxaan u isticmaalnay deeqda ugu badan, Xeerka Ogolaanshaha. Waxa ay kaga duwan tahay kuwa kale waa in ay tahay saddex tallaabo, i.e. waxa uu marayaa baadhitaano dheeraad ah. Marka hore, isticmaaluhu wuxuu sameeyaa codsi ogolaansho oggolaansho ah, wuxuu helayaa calaamad - Code Oggolaanshaha, ka dibna calaamaddan, sida haddii tikidhada safarka, uu codsado calaamadda gelitaanka. Dhammaan is dhexgalka ugu muhiimsan ee qoraalka oggolaanshahan wuxuu ku salaysan yahay jihaynta u dhaxaysa codsiga iyo serverka oggolaanshaha. Waxaad ka akhrisan kartaa wax badan oo ku saabsan deeqdan halkan.

OAuth waxay raacdaa fikradda ah in calaamadaha gelitaanka ee la helay oggolaanshaha ka dib ay tahay inay noqdaan kuwo ku meel gaar ah oo ay door bidaan 10kii daqiiqo kasta celcelis ahaan. Deeqda Xeerka Oggolaanshaha waa xaqiijin saddex-tallaabo ah iyada oo loo marayo jihooyin, 10kii daqiiqaba mar si loo leexiyo tallaabadaas, si daacad ah, maaha hawsha ugu fiican ee indhaha. Si loo xalliyo dhibaatadan, waxaa jira deeq kale - Refresh Token, oo aan sidoo kale u isticmaalnay waddankeena. Wax walba way sahlan yihiin halkan. Inta lagu jiro xaqiijinta deeqaha kale, marka lagu daro calaamadda gelitaanka ugu weyn, mid kale ayaa la soo saarayaa - Refresh Token, kaas oo la isticmaali karo hal mar oo keliya nolosheedana inta badan aad ayey u dheer tahay. Calaamaddan Cusbooneysii, marka TTL (Waqtiga la noolan karo) ee calaamada marin u helka ugu weyn uu dhamaado, codsiga calaamada gelitaanka cusub wuxuu imaan doonaa meesha ugu dambeysa ee deeq kale. Tusmada Dib-u-Celinta ee la isticmaalay isla markaaba dib ayaa loo dejiyaa eber. Jeeggani waa laba tallaabo waxaana lagu samayn karaa gadaasha, si aan loo fahmin isticmaaluhu.

3) Samee qaababka wax soo saarka xogta gaarka ah

Ka dib markii deeqaha la doortay la fuliyo, oggolaanshaha ayaa shaqeeya, waxaa habboon in la sheego helitaanka xogta ku saabsan isticmaalaha ugu dambeeya. OIDC waxay leedahay bar dhamaadka tan, halkaas oo aad ka codsan karto xogta isticmaalaha calaamada gelitaankaaga hadda iyo haddii ay tahay mid cusub. Oo haddii xogta isticmaaluhu aanay isbeddelin marar badan, oo aad u baahan tahay inaad raacdo kuwa hadda jira marar badan, waxaad u iman kartaa xal noocaas ah sida JWT tokens. Calaamadahaan sidoo kale waxaa taageeray heerka. Calaamadda JWT lafteedu waxay ka kooban tahay saddex qaybood: madax (macluumaadka ku saabsan calaamadda), culeyska (xogta kasta oo lagama maarmaanka ah) iyo saxiixa (saxiixa, calaamadda waxaa saxiixay server-ka oo aad mar dambe hubin kartaa isha saxiixeeda).

Hirgelinta OIDC, calaamadda JWT waxaa loo yaqaan id_token. Waxa la codsan karaa iyada oo ay la socoto calaamad gelitaanka caadiga ah waxa hadhayna waa in la xaqiijiyo saxeexa. Seerfarka oggolaanshaha ayaa tan bar dhamaad gooni ah leh oo leh farabadan furayaal dadweyne oo qaabaysan JWK. Iyadoo taas laga hadlayo, waxaa habboon in la sheego in ay jirto meel kale oo dhamaadka ah, taas oo ku salaysan heerka RFC5785 waxay ka tarjumaysaa qaabaynta hadda ee serverka OIDC. Waxay ka kooban tahay dhammaan ciwaannada barta dhamaadka (ay ku jirto ciwaanka giraanta furaha dadweynaha ee loo isticmaalo saxeexa), noocyada la taageeray iyo baaxadda, algorithms sir la isticmaalay, deeqaha la taageeray, iwm.

Tusaale ahaan Google-ka:

{
 "issuer": "https://accounts.google.com",
 "authorization_endpoint": "https://accounts.google.com/o/oauth2/v2/auth",
 "device_authorization_endpoint": "https://oauth2.googleapis.com/device/code",
 "token_endpoint": "https://oauth2.googleapis.com/token",
 "userinfo_endpoint": "https://openidconnect.googleapis.com/v1/userinfo",
 "revocation_endpoint": "https://oauth2.googleapis.com/revoke",
 "jwks_uri": "https://www.googleapis.com/oauth2/v3/certs",
 "response_types_supported": [
  "code",
  "token",
  "id_token",
  "code token",
  "code id_token",
  "token id_token",
  "code token id_token",
  "none"
 ],
 "subject_types_supported": [
  "public"
 ],
 "id_token_signing_alg_values_supported": [
  "RS256"
 ],
 "scopes_supported": [
  "openid",
  "email",
  "profile"
 ],
 "token_endpoint_auth_methods_supported": [
  "client_secret_post",
  "client_secret_basic"
 ],
 "claims_supported": [
  "aud",
  "email",
  "email_verified",
  "exp",
  "family_name",
  "given_name",
  "iat",
  "iss",
  "locale",
  "name",
  "picture",
  "sub"
 ],
 "code_challenge_methods_supported": [
  "plain",
  "S256"
 ],
 "grant_types_supported": [
  "authorization_code",
  "refresh_token",
  "urn:ietf:params:oauth:grant-type:device_code",
  "urn:ietf:params:oauth:grant-type:jwt-bearer"
 ]
}

Sidaa darteed, addoo isticmaalaya id_token, waxaad ku wareejin kartaa dhammaan calaamadaha lagama maarmaanka ah culeyska culeyska ee calaamadda oo aadan la xiriirin server-ka oggolaanshaha mar kasta si aad u codsato xogta isticmaalaha. Khasaaraha habkan ayaa ah in isbeddelka xogta isticmaalaha ee server-ka uusan isla markiiba iman, laakiin ay la socoto calaamad cusub oo gelitaanka.

Natiijooyinka fulinta

Marka, ka dib markii aan hirgelinnay server-kayaga OIDC oo aan isku dubbaridnay isku xirka dhinaca codsiga, waxaan xallinay dhibaatada wareejinta macluumaadka isticmaaleyaasha.
Maadaama OIDC ay tahay halbeeg furan, waxaan haysanaa ikhtiyaarka ah inaan doorano bixiye ama adeeg bixiyaha jira. Waxaan isku daynay Keycloak, oo u soo baxday inay aad ugu habboon tahay in la habeeyo, ka dib markii la dejiyo oo beddelo isku xirka isku xirka dhinaca codsiga, waxay diyaar u tahay inay tagto. Dhinaca codsiga, waxa hadhay oo dhan waa in la beddelo isku xidhka isku xidhka.

Ka hadalka xalalka jira

Ururkayaga dhexdiisa, sidii OIDC server-kii ugu horreeyay, waxaanu ku soo ururinay hirgelinteena, kaas oo lagu kabay sidii loo baahnaa. Ka dib dib u eegis faahfaahsan oo ku saabsan xalalka kale ee diyaarsan, waxaan dhihi karnaa in tani ay tahay wax aan macquul ahayn. Iyada oo la raacayo go'aanka lagu hirgelinayo server-kooda, waxaa jiray walaac dhinaca bixiyeyaasha ah maqnaanshaha shaqeynta lagama maarmaanka ah, iyo sidoo kale joogitaanka nidaam hore oo ay jireen oggolaansho kala duwan oo loogu talagalay adeegyada qaarkood iyo wax badan. xogta ku saabsan shaqaalaha mar hore ayaa la kaydiyay. Si kastaba ha ahaatee, hirgelinta diyaarsan, waxaa jira ku habboonaanta isdhexgalka. Tusaale ahaan, Keycloak wuxuu leeyahay nidaam maamul oo u gaar ah oo xogta si toos ah loogu kaydiyaa, kuma adkaan doonto inaad ka gudubto isticmaalayaashaada halkaas. Si tan loo sameeyo, Keycloak wuxuu leeyahay API kaas oo kuu oggolaanaya inaad si buuxda u fuliso dhammaan tallaabooyinka wareejinta lagama maarmaanka ah.

Tusaalaha kale ee shahaadaysan, xiisaha leh, fikradayda, hirgelinta waa Ory Hydra. Waa arrin xiiso leh sababtoo ah waxay ka kooban tahay qaybo kala duwan. Si aad u dhexgasho, waxaad u baahan doontaa inaad ku xidho adeega maamulka isticmaalaha iyo adeega ogolaanshiyaha oo aad kordhiso hadba sida loogu baahdo.

Keycloak iyo Ory Hydra ma aha kuwa kaliya ee xalalka ka baxsan. Way fiicantahay inaad doorato hirgalin ay shahaado ka heshay OpenID Foundation. Xalalkani waxay inta badan leeyihiin calaamada aqoonsiga OpenID.

Xidhiidhka Aqoonsiga Furan: oggolaanshaha codsiyada gudaha laga bilaabo caadada ilaa heerka

Sidoo kale ha iloobin bixiyeyaasha lacagta bixiya haddii aadan rabin inaad sii haysato server-kaaga OIDC. Maanta waxaa jira fursado badan oo wanaagsan.

Maxaa ku xiga

Mustaqbalka dhow, waxaanu si kale u xidhi doonaa taraafikada adeegyada gudaha. Waxaan qorsheyneynaa inaan ku wareejino SSO-keena hadda xisaabiyaha anagoo adeegsanayna OpenResty wakiil ku saleysan OAuth. Waxa jira xalal badan oo diyaarsan halkan, tusaale ahaan:
github.com/bitly/oauth2_proxy
github.com/ory/oathkeeper
github.com/keycloak/keycloak-gatekeeper

Alaabo dheeri ah

jwt.io - adeeg wanaagsan oo loogu talagalay ansaxinta calaamadaha JWT
openid.net/developers/certified - liiska fulinta OIDC ee la xaqiijiyay

Source: www.habr.com

Add a comment