OpenID Connect: fahazoan-dàlana amin'ny fampiharana anatiny avy amin'ny mahazatra mankany amin'ny mahazatra

Volana vitsy lasa izay, nampihatra mpizara OpenID Connect aho hitantana ny fidirana amin'ireo rindranasa anatiny an-jatony. Avy amin'ny fivoarantsika manokana, mety amin'ny ambaratonga kely kokoa, dia nifindra ho amin'ny fenitra eken'ny besinimaro isika. Ny fidirana amin'ny alàlan'ny serivisy foibe dia manamora be ny asa tsy misy dikany, mampihena ny vidin'ny fampiharana ny fanomezan-dàlana, mamela anao hahita vahaolana efa vita ary tsy hanakorontana ny atidohanao rehefa mamorona vaovao. Ato amin'ity lahatsoratra ity dia hiresaka momba ity tetezamita ity aho sy ireo banga izay vitantsika nofenoina.

OpenID Connect: fahazoan-dàlana amin'ny fampiharana anatiny avy amin'ny mahazatra mankany amin'ny mahazatra

Hatry ny ela... Ahoana no nanombohan’izany rehetra izany

Taona vitsy lasa izay, rehefa be loatra ny fampiharana anatiny ho an'ny fanaraha-maso amin'ny tanana, dia nanoratra fangatahana izahay hifehy ny fidirana ao anatin'ny orinasa. Fampiharana Rails tsotra izay mifandray amin'ny angon-drakitra misy fampahalalana momba ny mpiasa, izay nanamboarana ny fidirana amin'ny fiasa isan-karazany. Nandritra izany fotoana izany, nanangana ny SSO voalohany izahay, izay nifototra tamin'ny fanamarinana ny mari-pamantarana avy amin'ny sisin'ny mpanjifa sy ny mpizara fanomezan-dàlana, ny famantarana dia nafindra tamin'ny endrika miafina miaraka amin'ny masontsivana maromaro ary voamarina amin'ny serivera fanomezan-dàlana. Tsy izany no safidy mety indrindra, satria ny fampiharana anatiny tsirairay dia tsy maintsy mamaritra ny lojika lehibe, ary ny angon-drakitra mpiasa dia natambatra tanteraka tamin'ny mpizara fanomezan-dàlana.

Rehefa afaka kelikely, dia nanapa-kevitra ny hanatsotra ny asan'ny fanomezan-dàlana foibe. SSO dia nafindra tany amin'ny balancer. Miaraka amin'ny fanampian'ny OpenResty, nisy môdely nampiana an'i Lua izay nanamarika famantarana, nahafantatra hoe inona no fampiharana halehan'ny fangatahana, ary afaka manamarina raha misy fidirana ao. Io fomba fiasa io dia nanamora ny asa fanaraha-maso ny fidirana amin'ny fampiharana anatiny - ao amin'ny code of application tsirairay dia tsy ilaina intsony ny mamaritra ny lojika fanampiny. Vokatr'izany dia nakatonay ivelany ny fifamoivoizana, ary ny fampiharana mihitsy dia tsy nahalala na inona na inona momba ny fanomezan-dàlana.

Tsy voavaha anefa ny olana iray. Ahoana ny amin'ny fampiharana mila fampahalalana momba ny mpiasa? Azo atao ny nanoratra API ho an'ny serivisy fanomezan-dàlana, saingy tsy maintsy manampy lojika fanampiny ho an'ny fampiharana toy izany ianao. Fanampin'izay, te-hanaisotra ny fiankinan-doha amin'ny iray amin'ireo rindranasa nosoratanay manokana izahay, izay miompana amin'ny ho avy amin'ny fandikana amin'ny OpenSource, amin'ny mpizara fanomezan-dàlana anatiny. Mbola hiresaka momba izany indray isika. Ny vahaolana amin'ireo olana roa ireo dia ny OAuth.

amin'ny fenitra iraisana

OAuth dia fenitry ny fanomezan-dàlana azo takarina, ekena amin'ny ankapobeny, saingy satria tsy ampy ny fiasany, dia nanomboka nandinika ny OpenID Connect (OIDC) avy hatrany izy ireo. Ny OIDC mihitsy no fampiharana fahatelo amin'ny fenitry ny fanamarinana misokatra, izay nikoriana tao amin'ny add-on amin'ny protocol OAuth 2.0 (protokol fahazoan-dàlana misokatra). Ity vahaolana ity dia manakatona ny olan'ny tsy fahampian'ny angon-drakitra momba ny mpampiasa farany, ary ahafahana manova ny mpanome alalana ihany koa.

Na izany aza, tsy nisafidy mpamatsy manokana izahay ary nanapa-kevitra ny hanampy ny OIDC ho an'ny mpizara fanomezan-dàlana efa misy anay. Manohana an'io fanapahan-kevitra io ny zava-misy fa ny OIDC dia tena miovaova amin'ny resaka fanomezan-dàlana ho an'ny mpampiasa farany. Noho izany, azo atao ny nampihatra ny fanohanan'ny OIDC amin'ny mpizara fanomezan-dàlana anao ankehitriny.

OpenID Connect: fahazoan-dàlana amin'ny fampiharana anatiny avy amin'ny mahazatra mankany amin'ny mahazatra

Ny fomba fampiharana ny mpizara OIDC anay manokana

1) Nentina tamin'ny endrika tiana ny angona

Mba hampidirana ny OIDC dia ilaina ny mitondra ny angon-drakitra mpampiasa amin'izao fotoana izao amin'ny endrika takatry ny fenitra. Ao amin'ny OIDC dia antsoina hoe Claims izany. Ny fitakiana dia sehatra farany amin'ny angon-drakitra mpampiasa (anarana, mailaka, finday, sns.). misy lisitry ny hajia manara-penitra, ary izay rehetra tsy tafiditra amin'ity lisitra ity dia heverina ho fanao. Noho izany, ny teboka voalohany tokony hodinihinao raha te hisafidy mpamatsy OIDC efa misy ianao dia ny fahafahana manamboatra marika vaovao.

Ny vondron'ireo marika dia mitambatra ao anatin'ity sombiny manaraka ity - Faritra. Mandritra ny fanomezan-dàlana dia angatahana ny fidirana tsy amin'ny marika manokana, fa amin'ny sehatra, na dia tsy ilaina aza ny marika sasany avy amin'ny sehatra.

2) Nanatanteraka ny fanampiana ilaina

Ny ampahany manaraka amin'ny fampidirana ny OIDC dia ny fisafidianana sy ny fampiharana ireo karazana fanomezan-dàlana, ilay antsoina hoe famatsiam-bola. Miankina amin'ny fanomezan-dàlana nofantenana ny toe-javatra hafa mifandraika amin'ny fampiharana voafantina sy ny mpizara fanomezan-dàlana. Ny rafitra fakan-tahaka amin'ny fisafidianana ny fanomezana tsara dia aseho amin'ny sary etsy ambany.

OpenID Connect: fahazoan-dàlana amin'ny fampiharana anatiny avy amin'ny mahazatra mankany amin'ny mahazatra

Ho an'ny fangatahanay voalohany, nampiasa ny fanomezan-dàlana mahazatra indrindra izahay, ny Code of Authorization. Ny mahasamihafa azy amin'ny hafa dia dingana telo izy io, i.e. mandalo fitsapana fanampiny. Voalohany, manao fangatahana fahazoan-dàlana ny mpampiasa, mahazo mari-pamantarana - Code de l'autorisation, avy eo miaraka amin'ity marika ity, toy ny hoe misy tapakila ho an'ny dia, mangataka famantarana fidirana. Ny fifandraisana lehibe rehetra amin'ity script fanomezan-dàlana ity dia mifototra amin'ny fampidinana eo amin'ny fampiharana sy ny mpizara fanomezan-dàlana. Afaka mamaky bebe kokoa momba ity fanomezana ity ianao eto.

OAuth dia mifikitra amin'ny hevitra fa ny mari-pamantarana fidirana azo aorian'ny fanomezan-dàlana dia tokony ho vonjimaika ary tsara kokoa raha miova isaky ny 10 minitra amin'ny antsalany. Ny fanomezan-dàlana ho an'ny fanomezan-dàlana dia fanamarinana dingana telo amin'ny alàlan'ny fampidinana, isaky ny 10 minitra hamadihana ny dingana toy izany, mazava ho azy, dia tsy ny asa mahafinaritra indrindra ho an'ny maso. Mba hamahana ity olana ity dia misy fanampiana hafa - Refresh Token, izay nampiasainay teto amin'ny firenentsika ihany koa. Mora kokoa ny zava-drehetra eto. Mandritra ny fanamarinana avy amin'ny fanomezana iray hafa, ankoatry ny mari-pamantarana fidirana lehibe, dia misy iray hafa avoaka - Refresh Token, izay azo ampiasaina indray mandeha ary matetika dia lava kokoa ny androm-piainany. Miaraka amin'ity Token Refresh ity, rehefa tapitra ny TTL (Fotoana hivelomana) amin'ny mari-pamantarana fidirana lehibe, dia ho tonga any amin'ny faran'ny fanomezana iray hafa ny fangatahana mari-pamantarana fidirana vaovao. Ny Refresh Token ampiasaina dia averina amin'ny zero avy hatrany. Ity fisavana ity dia dingana roa ary azo atao any ambadika any, tsy hitan'ny mpampiasa.

3) Mametraha endrika famoahana angon-drakitra manokana

Aorian'ny fampiharana ireo famatsiam-bola voafantina dia miasa ny fanomezan-dàlana, ilaina ny manonona ny fahazoana angona momba ny mpampiasa farany. OIDC dia manana fiafarana mitokana ho an'izany, izay ahafahanao mangataka angon-drakitra mpampiasa miaraka amin'ny mari-pamantarana fidirana amin'izao fotoana izao ary raha toa ka misy ny daty. Ary raha tsy miova matetika ny angon'ny mpampiasa, ary mila manaraka ny ankehitriny imbetsaka ianao, dia afaka tonga amin'ny vahaolana toy ny JWT tokens. Ireo famantarana ireo dia tohanan'ny fenitra ihany koa. Ny mariky ny JWT dia misy ampahany telo: lohapejy (fampahalalana momba ny famantarana), enta-mavesatra (izay rehetra ilaina) ary sonia (sonia, ny token dia nosoniavin'ny mpizara ary azonao jerena avy eo ny loharanon'ny soniany).

Amin'ny fampiharana OIDC, ny famantarana JWT dia antsoina hoe id_token. Azo angatahina miaraka amin'ny mari-pamantarana fidirana mahazatra ary ny hany sisa tavela dia ny manamarina ny sonia. Ny lohamilina fanomezan-dàlana dia manana teboka misaraka amin'izany miaraka amin'ny andiana fanalahidin'ny daholobe amin'ny endrika J.W.K.. Ary raha miresaka momba izany, dia ilaina ny milaza fa misy farany iray hafa, izay mifototra amin'ny fenitra RFC5785 dia maneho ny firafitry ny mpizara OIDC ankehitriny. Ahitana ny adiresin'ny farany rehetra (anisan'izany ny adiresin'ny peratra fanalahidin'ny daholobe ampiasaina hanaovana sonia), marika sy velarana tohanana, algorithm encryption ampiasaina, fanomezana tohana, sns.

Ohatra amin'ny 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"
 ]
}

Noho izany, amin'ny fampiasana id_token, azonao atao ny mamindra ny mari-pamantarana ilaina rehetra amin'ny enta-mavesatry ny famantarana ary tsy mifandray amin'ny mpizara fanomezan-dàlana isaky ny mangataka angon-drakitra mpampiasa. Ny tsy fahampian'ity fomba fiasa ity dia ny fiovan'ny angon-drakitra mpampiasa avy amin'ny mpizara dia tsy tonga avy hatrany, fa miaraka amin'ny marika fidirana vaovao.

Vokatra fampiharana

Noho izany, taorian'ny fampiharana ny mpizara OIDC anay manokana sy ny fametrahana ny fifandraisana aminy eo amin'ny lafiny fampiharana, dia namaha ny olan'ny famindrana vaovao momba ny mpampiasa izahay.
Satria ny OIDC dia fenitra misokatra, manana safidy isika hisafidy mpamatsy efa misy na fampiharana server. Nanandrana Keycloak izahay, izay hita fa tena mety amin'ny fampiendrehana, aorian'ny fametrahana sy fanovana ny fanamafisana ny fifandraisana eo amin'ny lafiny fampiharana, dia vonona ny handeha. Eo amin'ny lafiny fampiharana, ny hany sisa tavela dia ny fanovana ny fandrindrana ny fifandraisana.

Miresaka momba ny vahaolana efa misy

Tao anatin'ny fikambananay, amin'ny maha mpizara OIDC voalohany anay, dia nanangona ny fampiharanay manokana izahay, izay nampiana araka izay ilaina. Taorian'ny famerenana amin'ny antsipiriany momba ny vahaolana hafa efa vita, dia afaka milaza isika fa teboka iray io. Ho fanohanana ny fanapahan-kevitra hampihatra ny mpizara azy manokana, dia nisy ny ahiahin'ny mpamatsy noho ny tsy fisian'ny fiasa ilaina, ary koa ny fisian'ny rafitra taloha izay misy fanomezan-dàlana manokana ho an'ny serivisy sasany ary be dia be. ny angon-drakitra momba ny mpiasa dia efa voatahiry. Na izany aza, amin'ny fampiharana efa vita, dia misy ny fahafahana miditra. Ohatra, manana rafitra fitantanana mpampiasa azy manokana i Keycloak ary voatahiry mivantana ao aminy ny angona, ary tsy ho sarotra ny hisongona ireo mpampiasa anao any. Mba hanaovana izany, Keycloak dia manana API izay ahafahanao manatanteraka tanteraka ny hetsika famindrana ilaina rehetra.

Ohatra iray hafa momba ny fanamarinana, mahaliana, araka ny hevitro, ny fampiharana dia Ory Hydra. Mahaliana izany satria misy singa samihafa. Mba hampidirana azy dia mila mampifandray ny serivisy fitantanana mpampiasa anao amin'ny serivisy fanomezan-dàlana azy ianao ary manitatra raha ilaina.

Tsy ny Keycloak sy Ory Hydra ihany no vahaolana tsy misy dikany. Tsara ny misafidy fampiharana nohamarinin'ny OpenID Foundation. Ireo vahaolana ireo matetika dia manana mari-pamantarana OpenID Certification.

OpenID Connect: fahazoan-dàlana amin'ny fampiharana anatiny avy amin'ny mahazatra mankany amin'ny mahazatra

Aza adino koa ny mpanome karama efa misy raha tsy te hitazona ny mpizara OIDC anao ianao. Ankehitriny dia misy safidy tsara maro.

Inona no manaraka?

Atsy ho atsy, hanakatona ny fifamoivoizana amin'ny serivisy anatiny amin'ny fomba hafa izahay. Mikasa ny hamindra ny SSO-nay amin'izao fotoana izao amin'ny mpifandanja amin'ny fampiasana OpenResty amin'ny proxy mifototra amin'ny OAuth izahay. Efa betsaka ny vahaolana efa vita eto, ohatra:
github.com/bitly/oauth2_proxy
github.com/ory/oathkeeper
github.com/keycloak/keycloak-gatekeeper

Fanampiny fanampiny

jwt.io - serivisy tsara amin'ny fanamarinana ny marika JWT
openid.net/developers/certified - lisitry ny fampiharana OIDC voamarina

Source: www.habr.com

Add a comment