OpenID Connect: pagtugot sa mga internal nga aplikasyon gikan sa naandan hangtod sa sumbanan

Pipila ka bulan ang milabay, nag-implementar ko og OpenID Connect server aron pagdumala sa pag-access sa gatusan sa among internal nga mga aplikasyon. Gikan sa among kaugalingon nga mga kalamboan, kombenyente sa gamay nga sukod, mibalhin kami sa usa ka sagad nga gidawat nga sumbanan. Ang pag-access pinaagi sa sentral nga serbisyo labi nga gipasimple ang mga monotonous nga operasyon, gipamubu ang gasto sa pagpatuman sa mga pagtugot, gitugotan ka nga makit-an ang daghang mga andam nga solusyon ug dili i-rack ang imong utok kung nag-develop og mga bag-o. Niini nga artikulo, hisgutan ko ang bahin sa kini nga pagbalhin ug ang mga bumps nga nahimo namon nga pun-on.

OpenID Connect: pagtugot sa mga internal nga aplikasyon gikan sa naandan hangtod sa sumbanan

Dugay na ang milabay... Giunsa kini tanan

Pipila ka tuig ang milabay, sa diha nga adunay daghan kaayo nga internal nga mga aplikasyon alang sa manwal nga pagkontrolar, misulat kami ug aplikasyon sa pagkontrolar sa pag-access sulod sa kompanya. Kini usa ka yano nga aplikasyon sa Rails nga konektado sa usa ka database nga adunay kasayuran bahin sa mga empleyado, diin gi-configure ang pag-access sa lainlaing mga gamit. Sa samang higayon, gipataas namo ang unang SSO, nga gibase sa pag-verify sa mga token gikan sa kilid sa kliyente ug sa authorization server, ang token gipasa sa encrypted nga porma nga adunay daghang mga parameter ug gipamatud-an sa authorization server. Dili kini ang labing kombenyente nga kapilian, tungod kay ang matag internal nga aplikasyon kinahanglan nga maghulagway sa usa ka igo nga layer sa lohika, ug ang mga database sa empleyado hingpit nga na-synchronize sa server sa pagtugot.

Paglabay sa pipila ka panahon, nakahukom kami nga pasimplehon ang tahas sa sentralisadong pagtugot. Ang SSO gibalhin sa balancer. Uban sa tabang sa OpenResty, usa ka template ang gidugang sa Lua nga nagsusi sa mga token, nahibal-an kung asa nga aplikasyon ang hangyo moadto, ug makasusi kung adunay access didto. Kini nga pamaagi labi nga gipasimple ang tahas sa pagkontrol sa pag-access sa mga internal nga aplikasyon - sa code sa matag aplikasyon, dili na kinahanglan nga ihulagway ang dugang nga lohika. Ingon usa ka sangputanan, gisirhan namon ang trapiko sa gawas, ug ang aplikasyon mismo wala’y nahibal-an bahin sa pagtugot.

Bisan pa, usa ka problema ang nagpabilin nga wala masulbad. Unsa man ang bahin sa mga aplikasyon nga nanginahanglan kasayuran bahin sa mga empleyado? Posible nga magsulat usa ka API alang sa serbisyo sa pagtugot, apan kinahanglan nimo nga idugang ang dugang nga lohika alang sa matag ingon nga aplikasyon. Dugang pa, gusto namong tangtangon ang pagsalig sa usa sa among kaugalingong sinulat nga aplikasyon, nga gitumong sa umaabot alang sa paghubad ngadto sa OpenSource, sa among internal nga authorization server. Atong hisgotan kini sa laing higayon. Ang solusyon sa duha ka problema mao ang OAuth.

sa komon nga mga sumbanan

Ang OAuth usa ka masabtan, kasagarang gidawat nga sukdanan sa pagtugot, apan tungod kay dili igo ang pagpaandar niini, gisugdan dayon nila ang paghunahuna sa OpenID Connect (OIDC). Ang OIDC mismo mao ang ikatulo nga pagpatuman sa open authentication standard, nga midagayday ngadto sa add-on sa OAuth 2.0 protocol (usa ka open authorization protocol). Kini nga solusyon nagsira sa problema sa kakulang sa datos bahin sa katapusan nga tiggamit, ug naghimo usab nga posible nga usbon ang taghatag sa pagtugot.

Bisan pa, wala kami nagpili usa ka piho nga tighatag ug nakahukom nga idugang ang panagsama sa OIDC alang sa among naglungtad nga server sa pagtugot. Pabor niini nga desisyon mao ang kamatuoran nga ang OIDC kay flexible kaayo sa termino sa pagtugot sa end user. Sa ingon, posible nga ipatuman ang suporta sa OIDC sa imong kasamtangan nga server sa pagtugot.

OpenID Connect: pagtugot sa mga internal nga aplikasyon gikan sa naandan hangtod sa sumbanan

Ang among paagi sa pagpatuman sa among kaugalingon nga OIDC server

1) Gidala ang datos sa gusto nga porma

Aron mahiusa ang OIDC, gikinahanglan nga dad-on ang kasamtangang datos sa tiggamit ngadto sa porma nga masabtan sa sumbanan. Sa OIDC gitawag kini nga Claims. Ang mga pag-angkon mao ang mga katapusang mga natad sa database sa gumagamit (ngalan, email, telepono, ug uban pa). Anaa standard nga listahan sa mga selyo, ug ang tanan nga wala maapil niini nga lista giisip nga kostumbre. Busa, ang unang punto nga kinahanglan nimong hatagan ug pagtagad kon gusto nimo nga mopili sa usa ka kasamtangan nga OIDC provider mao ang posibilidad sa sayon ​​nga pag-customize sa bag-ong mga tatak.

Ang grupo sa mga timaan gihiusa ngadto sa mosunod nga subset - Saklaw. Atol sa pagtugot, ang pag-access gihangyo dili sa piho nga mga tatak, apan sa mga sakup, bisan kung ang pipila nga mga tatak gikan sa sakup dili kinahanglan.

2) Gipatuman ang gikinahanglan nga mga grant

Ang sunod nga bahin sa OIDC integration mao ang pagpili ug pagpatuman sa mga tipo sa pagtugot, ang gitawag nga grants. Ang dugang nga senaryo sa interaksyon tali sa pinili nga aplikasyon ug sa server sa pagtugot magdepende sa pinili nga grant. Ang usa ka sulundon nga pamaagi sa pagpili sa husto nga grant gipakita sa numero sa ubos.

OpenID Connect: pagtugot sa mga internal nga aplikasyon gikan sa naandan hangtod sa sumbanan

Para sa una namong aplikasyon, among gigamit ang pinakakomon nga grant, ang Authorization Code. Ang kalainan niini gikan sa uban mao nga kini usa ka tulo ka lakang, i.e. nag-agi sa dugang nga pagsulay. Una, ang user naghimo sa usa ka hangyo alang sa pagtugot sa pagtugot, nakadawat sa usa ka token - Authorization Code, unya uban niini nga timaan, ingon nga adunay usa ka tiket alang sa pagbiyahe, hangyo sa usa ka access token. Ang tanan nga panguna nga interaksyon sa kini nga script sa pagtugot gibase sa mga pag-redirect tali sa aplikasyon ug sa server sa pagtugot. Makabasa ka og dugang bahin niini nga grant dinhi.

Ang OAuth nagsunod sa konsepto nga ang mga token sa pag-access nga nakuha pagkahuman sa pagtugot kinahanglan nga temporaryo ug kinahanglan nga usbon, mas maayo matag 10 minuto sa kasagaran. Ang paghatag sa Authorization Code usa ka tulo-ka-lakang nga pag-verify pinaagi sa mga pag-redirect, matag 10 minuto aron mabag-o ang ingon nga lakang, prangka, dili ang labing makapalipay nga buluhaton alang sa mga mata. Aron masulbad kini nga problema, adunay laing grant - Refresh Token, nga gigamit usab namo sa among nasud. Ang tanan mas sayon ​​dinhi. Atol sa pag-verify gikan sa laing grant, dugang pa sa nag-unang access token, laing usa ang gi-isyu - Refresh Token, nga magamit kausa lang ug ang tibuok kinabuhi niini kasagaran mas taas. Uban niini nga Refresh Token, kung ang TTL (Time to Live) sa main access token matapos, ang hangyo alang sa usa ka bag-ong access token moabot sa endpoint sa laing grant. Ang gigamit nga Refresh Token gi-reset dayon sa zero. Kini nga pagsusi duha ka lakang ug mahimo nga himuon sa background, nga dili mahibal-an sa tiggamit.

3) I-set up ang custom data output formats

Human mapatuman ang mga pinili nga grants, ang pagtugot molihok, angay nga hisgutan ang pagkuha sa datos mahitungod sa katapusan nga tiggamit. Ang OIDC adunay usa ka bulag nga katapusan alang niini, diin mahimo nimong hangyoon ang data sa gumagamit gamit ang imong kasamtangan nga token sa pag-access ug kung kini bag-o. Ug kung ang datos sa tiggamit dili kanunay magbag-o, ug kinahanglan nimo nga sundon ang mga karon sa daghang mga higayon, mahimo ka makaabut sa ingon nga solusyon sama sa mga token sa JWT. Kini nga mga token gisuportahan usab sa sumbanan. Ang JWT token mismo naglangkob sa tulo ka bahin: header (impormasyon bahin sa token), payload (bisan unsa nga kinahanglan nga datos) ug pirma (pirma, ang token gipirmahan sa server ug mahimo nimong susihon sa ulahi ang gigikanan sa pirma niini).

Sa pagpatuman sa OIDC, ang JWT token gitawag nga id_token. Mahimo kini nga hangyoon kauban ang usa ka normal nga token sa pag-access ug ang nahabilin mao ang pag-verify sa pirma. Ang server sa pagtugot adunay usa ka bulag nga katapusan alang niini nga adunay usa ka hugpong sa mga publiko nga yawe sa format Si J.W.K.. Ug sa paghisgot niini, angay nga hisgutan nga adunay lain nga katapusan nga punto, nga, base sa sumbanan RFC5785 nagpakita sa kasamtangan nga configuration sa OIDC server. Naglangkob kini sa tanan nga mga adres sa endpoint (lakip ang adres sa public key ring nga gigamit alang sa pagpirma), gisuportahan nga mga tatak ug mga sakup, gigamit nga mga algorithm sa pag-encrypt, gisuportahan nga mga grant, ug uban pa.

Pananglitan sa 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"
 ]
}

Sa ingon, gamit ang id_token, mahimo nimong ibalhin ang tanan nga kinahanglan nga mga timaan sa payload sa token ug dili makontak ang server sa pagtugot matag higayon aron mangayo data sa tiggamit. Ang disbentaha niini nga pamaagi mao nga ang pagbag-o sa data sa user gikan sa server dili moabut dayon, apan uban sa usa ka bag-ong access token.

Resulta sa pagpatuman

Mao nga, pagkahuman sa pagpatuman sa among kaugalingon nga server sa OIDC ug pag-configure sa mga koneksyon niini sa bahin sa aplikasyon, nasulbad namon ang problema sa pagbalhin sa kasayuran bahin sa mga tiggamit.
Tungod kay ang OIDC usa ka bukas nga sumbanan, kita adunay kapilian sa pagpili sa usa ka kasamtangan nga provider o pagpatuman sa server. Gisulayan namo ang Keycloak, nga nahimong sayon ​​​​kaayo nga i-configure, human sa pag-set up ug pag-usab sa mga configuration sa koneksyon sa kilid sa aplikasyon, andam na kini nga moadto. Sa bahin sa aplikasyon, ang nahabilin mao ang pagbag-o sa mga pagsulud sa koneksyon.

Paghisgot bahin sa kasamtangan nga mga solusyon

Sulod sa among organisasyon, isip unang server sa OIDC, among gitigom ang among kaugalingong pagpatuman, nga gidugangan kon gikinahanglan. Pagkahuman sa usa ka detalyado nga pagrepaso sa uban pang andam nga gihimo nga mga solusyon, mahimo naton isulti nga kini usa ka punto nga moot. Pabor sa desisyon nga ipatuman ang ilang kaugalingon nga server, adunay mga kabalaka sa bahin sa mga taghatag kung wala ang kinahanglan nga pag-andar, ingon man ang presensya sa usa ka karaan nga sistema diin adunay lainlaing mga pagtugot sa kostumbre alang sa pipila nga mga serbisyo ug daghan. sa mga datos bahin sa mga empleyado gitipigan na. Bisan pa, sa andam nga mga pagpatuman, adunay mga kasayon ​​alang sa paghiusa. Pananglitan, ang Keycloak adunay kaugalingon nga sistema sa pagdumala sa tiggamit ug ang datos direkta nga gitipigan niini, ug dili kini lisud nga maabutan ang imong mga tiggamit didto. Aron mahimo kini, ang Keycloak adunay usa ka API nga magtugot kanimo sa hingpit nga pagpatuman sa tanan nga kinahanglan nga mga aksyon sa pagbalhin.

Ang laing pananglitan sa usa ka sertipikado, makapaikag, sa akong opinyon, ang pagpatuman mao ang Ory Hydra. Makapainteres kini tungod kay kini naglangkob sa lainlaing mga sangkap. Aron mahiusa, kinahanglan nimo nga i-link ang imong serbisyo sa pagdumala sa gumagamit sa ilang serbisyo sa pagtugot ug i-extend kung gikinahanglan.

Ang Keycloak ug Ory Hydra dili lamang ang mga solusyon nga wala sa estante. Labing maayo ang pagpili sa usa ka pagpatuman nga gipamatud-an sa OpenID Foundation. Kini nga mga solusyon kasagaran adunay usa ka OpenID Certification badge.

OpenID Connect: pagtugot sa mga internal nga aplikasyon gikan sa naandan hangtod sa sumbanan

Ayaw usab kalimti ang mahitungod sa kasamtangan nga bayad nga mga provider kung dili nimo gusto nga itago ang imong OIDC server. Karon adunay daghang maayong kapilian.

Unsa ang sunod

Sa umaabot nga umaabot, atong isira ang trapiko sa mga internal nga serbisyo sa lahi nga paagi. Nagplano kami nga ibalhin ang among kasamtangan nga SSO sa balancer gamit ang OpenResty ngadto sa usa ka proxy base sa OAuth. Adunay daghan na nga andam nga mga solusyon dinhi, pananglitan:
github.com/bitly/oauth2_proxy
github.com/ory/oathkeeper
github.com/keycloak/keycloak-gatekeeper

Dugang nga mga materyales

jwt.io – maayong serbisyo alang sa pag-validate sa mga token sa JWT
openid.net/developers/certified - listahan sa mga sertipikadong pagpatuman sa OIDC

Source: www.habr.com

Idugang sa usa ka comment