OpenID Connect: tumello ea lits'ebetso tsa kahare ho tloha moetlong ho ea ho maemo

Likhoeli tse 'maloa tse fetileng ke ne ke kenya tšebetsong seva sa OpenID Connect ho laola phihlello bakeng sa makholo a lits'ebetso tsa rona tsa kahare. Ho latela tsoelo-pele ea rōna, e loketseng ka tekanyo e nyenyane, re ile ra fallela boemong bo amohelehang ka kakaretso. Ho fihlella ka ts'ebeletso e bohareng ho nolofatsa ts'ebetso ea monotonous haholo, ho fokotsa litšenyehelo tsa ho kenya ts'ebetsong tumello, ho u lumella ho fumana litharollo tse ngata tse lokiselitsoeng, 'me u se ke ua qhekella likelello tsa hau ha u etsa tse ncha. Sehloohong sena ke tla bua ka phetoho ena le maqhubu ao re khonneng ho a otla.

OpenID Connect: tumello ea lits'ebetso tsa kahare ho tloha moetlong ho ea ho maemo

Khale khale ... Moo tsohle li qalileng

Lilemong tse 'maloa tse fetileng, ha lits'ebetso tsa kahare li ne li ngata haholo hore re ka li laola, re ile ra ngola kopo ea ho laola phihlello ka har'a khamphani. E ne e le sesebelisoa se bonolo sa Rails se hokahaneng le database se nang le tlhaiso-leseling e mabapi le basebetsi, moo phihlello ea ts'ebetso e fapaneng e lokiselitsoeng. Ka nako e ts'oanang, re ile ra qala SSO ea pele, e neng e itšetlehile ka ho netefatsa li-tokens ka lehlakoreng la mofani le seva sa tumello; letšoao le ne le fetisetsoa ka mokhoa o patiloeng ka li-parameter tse 'maloa' me tsa netefatsoa ho seva sa tumello. Ena e ne e se eona khetho e bonolo ka ho fetesisa, kaha ts'ebeliso e 'ngoe le e' ngoe ea kahare e ne e tlameha ho hlalosa lintlha tse ngata, 'me li-database tsa basebetsi li ne li hokahantsoe ka botlalo le seva ea tumello.

Ka mor'a nako e itseng, re ile ra etsa qeto ea ho nolofatsa mosebetsi oa tumello e bohareng. SSO e ile ea fetisetsoa ho balancer. Ka thuso ea OpenResty, template e ile ea eketsoa ho Lua e hlahlobang li-tokens, e tseba hore na kopo e ea ho kopo efe, 'me e ka hlahloba hore na ho na le phihlello moo. Mokhoa ona o nolofalitse haholo mosebetsi oa ho laola phihlello ea lits'ebetso tsa kahare - ho ne ho se ho se tlhokahalo ea ho hlalosa logic e eketsehileng khoutu ea kopo ka 'ngoe. Ka lebaka leo, re ile ra koala sephethephethe ka ntle, empa kopo ka boeona e ne e sa tsebe letho ka tumello.

Leha ho le joalo, bothata bo le bong ha boa ka ba rarolloa. Ho thoe'ng ka likopo tse hlokang boitsebiso ba basebetsi? Ho ne ho ka khoneha ho ngola API bakeng sa tšebeletso ea tumello, empa joale u tla tlameha ho eketsa lintlha tse eketsehileng bakeng sa kopo e 'ngoe le e 'ngoe e joalo. Ho feta moo, re ne re batla ho tlosa ho itšetleha ka e 'ngoe ea likopo tsa rona tse ngotseng, tse shebaneng le ho fetolela ho OpenSource, ho seva sa rona sa tumello sa kahare. Re tla u bolella ka eona ka nako e 'ngoe. Tharollo mathateng ao ka bobeli e bile OAuth.

Ho ea ka litekanyetso tse amoheloang ka kakaretso

OAuth ke tekanyetso ea tumello e hlakileng, e amoheloang ka kakaretso, empa kaha ts'ebetso ea eona feela ha ea lekana, OpenID Connect (OIDC) e ile ea shejoa hang-hang. OIDC ka boeona ke ts'ebetsong ea boraro ea maemo a bulehileng a netefatso, e fetohileng setsi se seholo sa protocol ea OAuth 2.0 (Open Authorization Protocol). Tharollo ena e rarolla bothata ba ho hloka data mabapi le mosebelisi oa ho qetela, hape e etsa hore ho khonehe ho fetola mofani oa tumello.

Leha ho le joalo, ha rea ​​khetha mofani ea itseng mme re nkile qeto ea ho kenyelletsa khokahano le OIDC bakeng sa seva ea rona ea tumello e teng. Qeto ena e ile ea tšehetsoa ke taba ea hore OIDC e tenyetseha haholo ho latela tumello ea basebelisi ba ho qetela. Kahoo, ho ne ho khonahala ho kenya ts'ehetso ea OIDC ho seva sa hau sa tumello sa hajoale.

OpenID Connect: tumello ea lits'ebetso tsa kahare ho tloha moetlong ho ea ho maemo

Tsela ea rona ea ho kenya ts'ebetsong seva sa rona sa OIDC

1) Tlisa lintlha ka foromo e hlokahalang

Ho kopanya OIDC, hoa hlokahala ho tlisa data ea hajoale ea mosebelisi ka foromo e utloisisehang ho latela maemo. Ho OIDC sena se bitsoa Claims. Brands ha e le hantle ke likarolo tsa ho qetela polokelong ea basebelisi (lebitso, lengolo-tsoibila, mohala, joalo-joalo). E teng lethathamo le tloaelehileng la matšoao, ’me ntho e ’ngoe le e ’ngoe e sa kenyelletsoeng lethathamong lena e nkoa e le tloaelo. Ka hona, ntlha ea pele eo u hlokang ho e ela hloko haeba u batla ho khetha mofani oa OIDC ea seng a ntse a le teng ke bokhoni ba ho etsa litempe tse ncha habonolo.

Sehlopha sa matshwao se kopantswe ka sehlotshwana se latelang - Scope. Nakong ea tumello, phihlello e kopuoa eseng ho matšoao a ikhethileng, empa ho li-scopes, le haeba a mang a matšoao a sa hlokahaleng.

2) Ho phethahatsa lithuso tse hlokahalang

Karolo e latelang ea kopanyo ea OIDC ke khetho le ts'ebetsong ea mefuta ea tumello, e bitsoang lithuso. Boemo bo bong ba tšebelisano pakeng tsa kopo e khethiloeng le seva sa tumello e tla itšetleha ka thuso e khethiloeng. Morero o lekantsoeng oa ho khetha thuso e nepahetseng o hlahisoa setšoantšong se ka tlase.

OpenID Connect: tumello ea lits'ebetso tsa kahare ho tloha moetlong ho ea ho maemo

Bakeng sa kopo ea rona ea pele, re sebelisitse thuso e tloaelehileng haholo - Authorization Code. Phapang ea eona ho tse ling ke hore ke mehato e meraro, i.e. e kena tekong e eketsehileng. Ntlha ea pele, mosebedisi o etsa kopo ea tumello ea tumello, o fumana letšoao la Code Authorization, joale ka letšoao lena, joalokaha eka o na le tekete ea ho tsamaea, o kōpa letšoao la ho fihlella. Litšebelisano tsohle tsa mantlha tsa boemo bona ba tumello li ipapisitse le litokiso lipakeng tsa ts'ebeliso le seva ea tumello. U ka bala haholoanyane ka thuso ena mona.

OAuth e latela mohopolo oa hore li-tokens tsa phihlello tse fumanoeng ka mor'a tumello e lokela ho ba tsa nakoana 'me haholo-holo li fetohe ka karolelano metsotso e meng le e meng e 10. Thuso ea Khoutu ea Authorization ke netefatso ea mehato e meraro ka ho tsamaisa hape; ho etsa mohato o joalo metsotso e meng le e meng e 10, ho bua 'nete, ha se mosebetsi o monate ka ho fetesisa oa leihlo. Ho rarolla bothata bona, ho na le thuso e 'ngoe - Refresh Token, eo hape re e sebelisitseng. Tsohle li bonolo ho feta mona. Nakong ea ho netefatsoa ho tsoa ho thuso e 'ngoe, ho phaella ho letšoao le ka sehloohong la ho fihlella, e' ngoe e fanoa - Refresh Token, e ka sebelisoang hanngoe feela 'me nako ea bophelo ba eona, e le molao, e telele haholo. Ka Letšoao lena la Refresh, ha TTL (Nako ea ho Phela) ea tokene e kholo ea ho fihlella e fela, kopo ea tokene e ncha ea ho fumana e tla fihla qetellong ea thuso e 'ngoe. Letšoao la Refresh le sebelisitsoeng hang-hang le khutlisetsoa ho zero. Cheke ena e na le mehato e 'meli' me e ka etsoa ka morao, e sa hlokomeloe ke mosebedisi.

3) Lifomate tsa tlhahiso ea data ea mosebelisi e hlophisitsoeng

Hang ha lithuso tse khethiloeng li kenngoe tšebetsong, tumello e sebetsa, ho bohlokoa ho bolela ho amoheloa ha data ea basebelisi ba ho qetela. OIDC e na le pheletso e arohaneng bakeng sa sena, moo o ka kopang data ea mosebelisi ka tokene ea hau ea phihlello ea hajoale le haeba e le nakong. 'Me haeba data ea mosebedisi e sa fetohe hangata, empa o hloka ho ea bakeng sa tsa morao-rao hangata, o ka fumana tharollo e kang li-tokens tsa JWT. Li-tokens tsena li boetse li tšehetsoa ke maemo. Letšoao la JWT ka boeona le na le likarolo tse tharo: hlooho (boitsebiso bo mabapi le lets'oao), moputso (data leha e le efe e hlokahalang) le ho saena (saeno, letšoao le saennoe ke seva 'me nakong e tlang u ka hlahloba mohloli oa ho saena ha eona).

Ts'ebetsong ea OIDC, lets'oao la JWT le bitsoa id_token. E ka kopuoa hammoho le tokene ea kamehla ea phihlello mme se setseng ke ho netefatsa tekeno. Bakeng sa morero ona, seva sa tumello se na le sebaka se arohaneng se nang le lihlopha tsa linotlolo tsa sechaba ka mokhoa oo J.W.K.. 'Me ha re bua ka sena, ke habohlokoa ho bolela hore ho na le ntlha e' ngoe ea qetello, e thehiloeng ho litekanyetso RFC5785 e bonts'a tlhophiso ea hajoale ea seva ea OIDC. E na le liaterese tsohle tsa ho qetela (ho kenyeletsoa le aterese ea selikalikoe sa senotlolo sa sechaba se sebelisetsoang ho saena), litempe tse tšehetsoeng le li-scopes, li-algorithms tse sebelisitsoeng tsa encryption, lithuso tse tšehetsoeng, joalo-joalo.

Ka mohlala ho Google:

{
 "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"
 ]
}

Ka hona, ka ho sebelisa id_token u ka fetisetsa matšoao ohle a hlokahalang ho moputso oa tokens mme o se ke oa ikopanya le seva sa tumello nako le nako ho kopa data ea mosebelisi. Phoso ea mokhoa ona ke hore liphetoho tsa data ea mosebelisi ho tsoa ho seva ha li tle hang-hang, empa hammoho le tokeneng e ncha ea phihlello.

Liphetho tsa ts'ebetsong

Kahoo, ka mor'a ho kenya ts'ebetsong seva sa rona sa OIDC le ho theha likhokahano ho eona ka lehlakoreng la kopo, re ile ra rarolla bothata ba ho fetisetsa tlhahisoleseding ea mosebedisi.
Kaha OIDC ke maemo a bulehileng, joale re na le khetho ea ho khetha mofani ea teng kapa ts'ebetsong ea seva. Re lekile Keycloak, e ileng ea bonahala e le bonolo haholo ho e hlophisa; kamora ho theha le ho fetola litlhophiso tsa khokahano ka lehlakoreng la kopo, e se e loketse ho tsamaea. Ka lehlakoreng la ts'ebeliso, se setseng ke ho fetola litlhophiso tsa khokahano.

Ho bua ka litharollo tse teng

Ka hare ho mokhatlo oa rona, joaloka seva sa pele sa OIDC, re ile ra bokella ts'ebetsong ea rona, e ileng ea tlatsetsoa ha ho hlokahala. Ka mor'a tlhahlobo e qaqileng ea litharollo tse ling tse lokiselitsoeng, re ka bolela hore ena ke ntlha e tsosang khang. Qeto ea ho kenya tšebetsong seva ea rona e entsoe ke matšoenyeho a bafani mabapi le khaello ea ts'ebetso e hlokahalang, hammoho le boteng ba sistimi ea khale e nang le tumello e fapaneng ea lits'ebeletso tse ling mme e se e bolokile data e ngata ka basebetsi. . Leha ho le joalo, lits'ebetsong tse seng li entsoe, ho na le menyetla ea ho kopanya. Mohlala, Keycloak e na le sistimi ea eona ea taolo ea basebelisi mme data e bolokiloe ka kotloloho ho eona, mme ho tsamaisa basebelisi ba hau moo ho ke ke ha ba thata. Bakeng sa morero ona, Keycloak e na le API e tla u lumella ho phethahatsa ka botlalo liketso tsohle tse hlokahalang tsa ho fetisa.

Mohlala o mong oa bopaki bo tiisitsoeng, bo thahasellisang, ka maikutlo a ka, ts'ebetsong ke Ory Hydra. E ea thahasellisa hobane e na le likarolo tse fapaneng. Ho kopanya, o tla hloka ho hokahanya ts'ebeletso ea hau ea taolo ea basebelisi le ts'ebeletso ea bona ea tumello le ho holisa ha ho hlokahala.

Keycloak le Ory Hydra ha se tsona feela tharollo e lokiselitsoeng. Ho molemo ho khetha ts'ebetsong e netefalitsoeng ke OpenID Foundation. Litharollo tsena hangata li na le beche ea Setifikeiti sa OpenID.

OpenID Connect: tumello ea lits'ebetso tsa kahare ho tloha moetlong ho ea ho maemo

Hape u seke oa lebala ka bafani ba teng ba lefuoang haeba u sa batle ho boloka seva sa hau sa OIDC. Kajeno ho na le likhetho tse ngata tse ntle.

Ke eng e tlang

Haufinyane, re tla koala sephethephethe sa litšebeletso tsa ka hare ka tsela e fapaneng. Re ntse re rera ho fallisetsa SSO ea rona ea hajoale ho lekanselara re sebelisa OpenResty ho ea ho proxy e thehiloeng ho OAuth. Hape ho na le litharollo tse ngata tse seng li entsoe mona, mohlala:
github.com/bitly/oauth2_proxy
github.com/ory/oathkeeper
github.com/keycloak/keycloak-gatekeeper

Lisebelisoa tse ling

jwt.io - ts'ebeletso e ntle ea ho lekola li-tokens tsa JWT
openid.net/developers/certified - lenane la ts'ebetsong ea OIDC e netefalitsoeng

Source: www.habr.com

Eketsa ka tlhaloso