OpenID Connect: cead airson tagraidhean a-staigh bho chleachdadh gu ìre àbhaisteach

O chionn beagan mhìosan, bha mi a’ cur an gnìomh frithealaiche OpenID Connect gus ruigsinneachd a riaghladh airson ceudan de na tagraidhean a-staigh againn. Bho na leasachaidhean againn fhèin, goireasach air sgèile nas lugha, tha sinn air gluasad gu ìre ris an gabhar san fharsaingeachd. Tha ruigsinneachd tron ​​​​t-seirbheis mheadhain gu mòr a’ sìmpleachadh obrachaidhean monotonous, a’ lughdachadh cosgais buileachadh ùghdaran, a’ leigeil leat mòran fhuasglaidhean deiseil a lorg agus gun a bhith a’ racadh d’ eanchainn nuair a bhios tu a’ leasachadh feadhainn ùra. San artaigil seo, bruidhnidh mi mun ghluasad seo agus na cnapan a chaidh againn air a lìonadh.

OpenID Connect: cead airson tagraidhean a-staigh bho chleachdadh gu ìre àbhaisteach

O chionn fhada... Mar a thòisich e uile

O chionn beagan bhliadhnaichean, nuair a bha cus thagraidhean air an taobh a-staigh airson smachd làimhe, sgrìobh sinn tagradh airson smachd a chumail air ruigsinneachd taobh a-staigh a’ chompanaidh. B’ e tagradh sìmplidh Rails a bh’ ann a bha ceangailte ri stòr-dàta le fiosrachadh mu luchd-obrach, far an deach cothrom air diofar fheartan a rèiteachadh. Aig an aon àm, thog sinn a ’chiad SSO, a bha stèidhichte air dearbhadh comharran bho thaobh an neach-dèiligidh agus an t-seirbheisiche ùghdarrais, chaidh an comharra a chuir a-mach ann an cruth crioptaichte le grunn pharaimearan agus a dhearbhadh air an t-seirbheisiche ùghdarrais. Cha b’ e seo an roghainn as freagarraiche, leis gu robh aig gach tagradh a-staigh ri cunntas a thoirt air ìre mhath de loidsig, agus bha stòran-dàta an luchd-obrach air an sioncronachadh gu tur leis an t-seirbheisiche ùghdarrais.

Às deidh beagan ùine, chuir sinn romhainn an obair airson cead meadhanaichte a dhèanamh nas sìmplidhe. Chaidh SSO a ghluasad chun neach-cothromachaidh. Le cuideachadh bho OpenResty, chaidh teamplaid a chuir ri Lua a rinn sgrùdadh air comharran, a bha eòlach air dè an tagradh a bha an t-iarrtas a’ dol, agus a dh’ fhaodadh dèanamh cinnteach an robh ruigsinneachd ann. Rinn an dòigh-obrach seo gu mòr an obair smachd a chumail air ruigsinneachd air tagraidhean a-staigh - ann an còd gach tagraidh, cha robh feum air tuilleadh cunntas a thoirt air loidsig a bharrachd. Mar thoradh air an sin, dhùin sinn an trafaic air an taobh a-muigh, agus cha robh fios aig an tagradh fhèin mu dheidhinn cead.

Ach, bha aon duilgheadas fhathast gun fhuasgladh. Dè mu dheidhinn tagraidhean a dh’ fheumas fiosrachadh mu luchd-obrach? Bha e comasach API a sgrìobhadh airson an t-seirbheis ùghdarrais, ach an uairsin dh'fheumadh tu loidsig a bharrachd a chuir ris airson gach tagradh mar sin. A bharrachd air an sin, bha sinn airson faighinn cuidhteas an eisimeileachd air aon de na tagraidhean fèin-sgrìobhte againn, a bha ag amas san àm ri teachd airson eadar-theangachadh gu OpenSource, air an t-seirbheisiche ùghdarrais a-staigh againn. Bruidhnidh sinn mu dheidhinn uair eile. B' e OAuth am fuasgladh air an dà dhuilgheadas.

a rèir inbhean coitcheann

Tha OAuth na inbhe ùghdarrais a tha furasta a thuigsinn, ris an gabhar san fharsaingeachd, ach leis nach eil ach a ghnìomhachd gu leòr, thòisich iad sa bhad a’ beachdachadh air OpenID Connect (OIDC). Is e OIDC fhèin an treas buileachadh den inbhe dearbhaidh fosgailte, a tha air sruthadh a-steach do add-on thairis air protocol OAuth 2.0 (pròtacal cead fosgailte). Bidh am fuasgladh seo a’ dùnadh duilgheadas dìth dàta mun neach-cleachdaidh deireannach, agus cuideachd ga dhèanamh comasach an solaraiche ùghdarrais atharrachadh.

Ach, cha do thagh sinn solaraiche sònraichte agus chuir sinn romhainn amalachadh a chuir ris le OIDC airson an t-seirbheisiche ùghdarrais a th’ againn mar-thà. Airson a’ cho-dhùnaidh seo bha an fhìrinn gu bheil OIDC gu math sùbailte a thaobh cead cleachdaiche deireannach. Mar sin, bha e comasach taic OIDC a chuir an gnìomh air an t-seirbheisiche ùghdarrais gnàthach agad.

OpenID Connect: cead airson tagraidhean a-staigh bho chleachdadh gu ìre àbhaisteach

An dòigh againn air ar frithealaiche OIDC fhèin a chuir an gnìomh

1) Thoir an dàta chun fhoirm a bha thu ag iarraidh

Gus OIDC fhilleadh a-steach, feumar an dàta cleachdaiche gnàthach a thoirt gu cruth a tha furasta a thuigsinn leis an inbhe. Ann an OIDC canar Tagraidhean ris an seo. Tha tagraidhean gu ìre mhòr nan raointean deireannach ann an stòr-dàta an luchd-cleachdaidh (ainm, post-d, fòn, msaa). Tha ann liosta àbhaisteach de stampaichean, agus tha a h-uile dad nach eil air a ghabhail a-steach san liosta seo air a mheas mar chleachdadh. Mar sin, is e a’ chiad phuing air am feum thu aire a thoirt ma tha thu airson solaraiche OIDC gnàthaichte a thaghadh an comas suaicheantasan ùra a ghnàthachadh gu h-iomchaidh.

Tha am buidheann de chomharran air an cur còmhla anns an fho-sheata a leanas - Farsaingeachd. Rè cead, thathar ag iarraidh ruigsinneachd chan ann gu suaicheantasan sònraichte, ach gu scopes, eadhon ged nach eil feum air cuid de na suaicheantasan bhon raon.

2) Cuir an gnìomh na tabhartasan riatanach

Is e an ath phàirt de aonachadh OIDC taghadh agus buileachadh seòrsaichean ùghdarrais, na tabhartasan ris an canar. Bidh an suidheachadh eadar-obrachaidh eile eadar an tagradh taghte agus an frithealaiche ceadachaidh an urra ris an tabhartas taghte. Tha sgeama barraichte airson taghadh an tabhartais cheart ri fhaicinn anns an fhigear gu h-ìosal.

OpenID Connect: cead airson tagraidhean a-staigh bho chleachdadh gu ìre àbhaisteach

Airson a’ chiad iarrtas againn, chleachd sinn an tabhartas as cumanta, an Còd Ùghdarrachaidh. Is e an diofar a th’ aige bho chàch gur e trì ceum a th’ ann, i.e. a’ dol tro dheuchainnean a bharrachd. An toiseach, bidh an neach-cleachdaidh a 'dèanamh iarrtas airson cead ceadachaidh, a' faighinn tòcan - Còd Ùghdarrachaidh, an uairsin leis a 'chomharra seo, mar gum biodh e le tiogaid airson siubhal, ag iarraidh tòcan ruigsinneachd. Tha a h-uile prìomh eadar-obrachadh den sgriobt ùghdarrais seo stèidhichte air ath-sheòlaidhean eadar an tagradh agus am frithealaiche ceadachaidh. Faodaidh tu barrachd a leughadh mun tabhartas seo an seo.

Tha OAuth a’ cumail ris a’ bheachd gum bu chòir na comharran ruigsinneachd a gheibhear às deidh cead a bhith sealach agus atharrachadh gu cuibheasach gach 10 mionaidean. Tha tabhartas Còd Ùghdarrachaidh na dhearbhadh trì-cheum tro ath-sheòlaidhean, chan e a h-uile 10 mionaid airson a leithid de cheum a thionndadh, gu fìrinneach, an obair as tlachdmhoire dha na sùilean. Gus an duilgheadas seo fhuasgladh, tha tabhartas eile ann - Refresh Token, a chleachd sinn san dùthaich againn cuideachd. Tha a h-uile dad nas fhasa an seo. Rè dearbhadh bho thabhartas eile, a bharrachd air a 'phrìomh chomharra ruigsinneachd, thèid fear eile a thoirt seachad - Refresh Token, nach gabh a chleachdadh ach aon turas agus mar as trice bidh a bheatha fada nas fhaide. Leis an Refresh Token seo, nuair a thig an TTL (Time to Live) den phrìomh chomharra ruigsinneachd gu crìch, thig an t-iarrtas airson comharra ruigsinneachd ùr gu crìoch tabhartais eile. Tha an Refresh Token cleachdte air ath-shuidheachadh sa bhad gu neoni. Tha an t-seic seo dà-cheum agus faodar a dhèanamh air a’ chùl, gun fhiosta don neach-cleachdaidh.

3) Stèidhich cruthan toraidh dàta àbhaisteach

Às deidh na tabhartasan taghte a bhith air an cur an gnìomh, bidh cead ag obair, is fhiach iomradh a thoirt air faighinn dàta mun neach-cleachdaidh deireannach. Tha puing crìochnachaidh fa-leth aig OIDC airson seo, far an urrainn dhut dàta cleachdaiche iarraidh leis an tòcan ruigsinneachd gnàthach agad agus ma tha e ùraichte. Agus mura atharraich dàta an neach-cleachdaidh cho tric, agus gum feum thu an fheadhainn a th’ ann an-dràsta a leantainn iomadh uair, faodaidh tu tighinn gu leithid de fhuasgladh ri JWT tokens. Tha na comharran sin cuideachd a’ faighinn taic bhon inbhe. Tha trì pàirtean anns an tòcan JWT fhèin: bann-cinn (fiosrachadh mun tòcan), uallach pàighidh (dàta riatanach sam bith) agus ainm-sgrìobhte (ainm-sgrìobhte, tha an tòcan air a shoidhnigeadh leis an t-seirbheisiche agus faodaidh tu sgrùdadh a dhèanamh air stòr an ainm-sgrìobhte aige nas fhaide air adhart).

Ann am buileachadh OIDC, canar id_token ris an tòcan JWT. Faodar iarraidh còmhla ri comharra ruigsinneachd àbhaisteach agus chan eil air fhàgail ach an t-ainm-sgrìobhte a dhearbhadh. Tha puing crìochnachaidh fa-leth aig an t-seirbheisiche ùghdarrais airson seo le dòrlach de iuchraichean poblach san fhòrmat J.W.K.. Agus a 'bruidhinn air an seo, is fhiach iomradh a thoirt gu bheil crìoch eile ann, a tha, stèidhichte air an ìre RFC 5785 a’ nochdadh rèiteachadh gnàthach an fhrithealaiche OIDC. Tha a h-uile seòladh crìochnachaidh ann (a’ toirt a-steach seòladh an fhàinne iuchrach poblach a thathas a’ cleachdadh airson soidhnigeadh), suaicheantasan agus scopes le taic, algorithms crioptachaidh cleachdte, tabhartasan le taic, msaa.

Mar eisimpleir air 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"
 ]
}

Mar sin, a’ cleachdadh id_token, faodaidh tu na comharran riatanach uile a ghluasad gu uallach pàighidh an tòcan agus gun a bhith a’ cur fios chun t-seirbheisiche ùghdarrais gach uair gus dàta neach-cleachdaidh iarraidh. Is e ana-cothrom an dòigh-obrach seo nach tig an atharrachadh ann an dàta luchd-cleachdaidh bhon fhrithealaiche sa bhad, ach còmhla ri comharra ruigsinneachd ùr.

Toraidhean buileachaidh

Mar sin, às deidh dhuinn ar frithealaiche OIDC fhèin a chuir an gnìomh agus ceanglaichean a rèiteachadh ris air taobh an tagraidh, dh’ fhuasgail sinn an duilgheadas a thaobh gluasad fiosrachadh mu luchd-cleachdaidh.
Leis gur e inbhe fosgailte a th’ ann an OIDC, tha roghainn againn solaraiche no buileachadh frithealaiche a tha ann mu thràth a thaghadh. Dh'fheuch sinn Keycloak, a thionndaidh a-mach gu robh e gu math goireasach a rèiteachadh, às deidh dhuinn rèiteachadh ceangail a stèidheachadh agus atharrachadh air taobh an tagraidh, tha e deiseil airson a dhol. Air taobh an tagraidh, chan eil air fhàgail ach na rèiteachaidhean ceangail atharrachadh.

A 'bruidhinn mu na fuasglaidhean a th' ann mar-thà

Taobh a-staigh na buidhne againn, mar a’ chiad fhrithealaiche OIDC, chuir sinn ri chèile ar buileachadh fhèin, a chaidh a leudachadh mar a dh’ fheumar. Às deidh ath-sgrùdadh mionaideach air fuasglaidhean deiseil eile, faodaidh sinn a ràdh gur e puing connspaid a tha seo. A thaobh a’ cho-dhùnaidh an t-seirbheisiche aca fhèin a chuir an gnìomh, bha draghan ann bho sholaraichean às aonais an comas-gnìomh riatanach, a bharrachd air làthaireachd seann shiostam anns an robh diofar ùghdaran àbhaisteach airson cuid de sheirbheisean agus tòrr dàta mu luchd-obrach air a stòradh mu thràth. Ach, ann am buileachadh deiseil, tha goireasan ann airson amalachadh. Mar eisimpleir, tha an siostam riaghlaidh cleachdaiche fhèin aig Keycloak agus tha dàta air a stòradh gu dìreach ann, agus cha bhith e duilich a dhol seachad air do luchd-cleachdaidh an sin. Gus seo a dhèanamh, tha API aig Keycloak a leigeas leat na gnìomhan gluasaid riatanach uile a choileanadh.

Is e eisimpleir eile de bhuileachadh, inntinneach, nam bheachd-sa, Ory Hydra. Tha e inntinneach oir tha e air a dhèanamh suas de dhiofar phàirtean. Gus amalachadh, feumaidh tu an t-seirbheis riaghlaidh cleachdaiche agad a cheangal ris an t-seirbheis ceadachaidh aca agus leudachadh mar a dh’ fheumar.

Chan e Keycloak agus Ory Hydra na h-aon fhuasglaidhean far-na-sgeilp. Tha e nas fheàrr buileachadh a tha air a dhearbhadh leis an OpenID Foundation a thaghadh. Mar as trice bidh bràiste Teisteanas OpenID aig na fuasglaidhean sin.

OpenID Connect: cead airson tagraidhean a-staigh bho chleachdadh gu ìre àbhaisteach

Cuideachd na dìochuimhnich mu na solaraichean pàighte a th’ ann mar-thà mura h-eil thu airson am frithealaiche OIDC agad a chumail. An-diugh tha mòran roghainnean math ann.

Dè tha ri thighinn

Ann an aithghearrachd, tha sinn a’ dol a dhùnadh trafaic gu seirbheisean a-staigh ann an dòigh eadar-dhealaichte. Tha sinn an dùil an SSO gnàthach againn a ghluasad air a’ chothromaiche a’ cleachdadh OpenResty gu neach-ionaid stèidhichte air OAuth. Tha mòran fhuasglaidhean deiseil an seo mu thràth, mar eisimpleir:
github.com/bitly/oauth2_proxy
github.com/ory/oathkeeper
github.com/keycloak/keycloak-gatekeeper

Stuthan a bharrachd

jwt.io - seirbheis mhath airson comharran JWT a dhearbhadh
openid.net/developers/certified - liosta de bhuileachadh OIDC le teisteanas

Source: www.habr.com

Cuir beachd ann