SSO дар меъмории микросервис. Мо Keycloak-ро истифода мебарем. Қисми №1

Дар ҳама гуна як ширкати бузург ва X5 Retail Group истисно нест, зеро он рушд мекунад, шумораи лоиҳаҳое, ки иҷозати корбарро талаб мекунанд, меафзояд. Бо мурури замон, гузариши бефосилаи корбарон аз як замима ба замимаи дигар талаб карда мешавад ва он гоҳ зарурати истифодаи сервери ягонаи Single-Sing-On (SSO) ба миён меояд. Аммо чӣ гуфтан мумкин аст, вақте ки провайдерҳои шахсият ба монанди AD ё дигарон, ки атрибутҳои иловагӣ надоранд, аллакай дар лоиҳаҳои гуногун истифода мешаванд. Синфи системаҳо бо номи "брокерҳои мушаххас" ба наҷот меоянд. Намояндагони он, аз қабили Keycloak, идоракунии Gravitee Access ва ғайра аз ҳама функсионалӣ мебошанд. Аксар вақт ҳолатҳои истифода метавонанд гуногун бошанд: ҳамкории мошин, иштироки корбар ва ғайра. Ҳалли бояд функсияҳои фасеҳ ва миқёспазирро дастгирӣ кунад, ки метавонад тамоми талаботро дар як, ва чунин қарорҳо ширкати мо ҳоло брокери нишондод дорад - Keycloak.

SSO дар меъмории микросервис. Мо Keycloak-ро истифода мебарем. Қисми №1

Keycloak як идентификатсияи кушодаасос ва маҳсулоти назорати дастрасӣ мебошад, ки аз ҷониби RedHat нигоҳ дошта мешавад. Он асоси маҳсулоти ширкат бо истифода аз SSO - RH-SSO мебошад.

Мафҳумҳои асосӣ

Пеш аз он ки шумо ба ҳалли масъалаҳо ва равишҳо шурӯъ кунед, шумо бояд аз рӯи истилоҳот ва пайдарпаии равандҳо қарор қабул кунед:

SSO дар меъмории микросервис. Мо Keycloak-ро истифода мебарем. Қисми №1

Муайян кардан тартиби шинохти субъект бо идентификатори он аст (ба ибораи дигар, ин таърифи ном, логин ё рақам аст).

Сертификатсия - ин тартиби аутентификатсия аст (корбар бо парол тафтиш карда мешавад, мактуб бо имзои электронӣ тафтиш карда мешавад ва ғ.)

Иҷозатнома - ин таъмини дастрасӣ ба захира (масалан, ба почтаи электронӣ) мебошад.

Брокери шахсият

клавиатура ҳалли сарчашмаи кушодаи шахсият ва идоракунии дастрасӣ аст, ки барои истифода дар ИС тарҳрезӣ шудааст, ки дар он намунаҳои меъмории микросервис истифода мешаванд.

Keycloak чунин хусусиятҳоро ба монанди воридшавии ягона (SSO), шахсияти миёнаравӣ ва вуруди иҷтимоӣ, федератсияи корбарон, адаптерҳои муштарӣ, консоли администратор ва консоли идоракунии ҳисобро пешниҳод мекунад.

Функсияҳои асосӣ, ки аз ҷониби Keycloak дастгирӣ мешаванд:

  • Барои замимаҳои браузер.
  • Дастгирии OpenID/OAuth 2.0/SAML.
  • Brokering Identity - аутентификатсия бо истифода аз берунаи OpenID Connect ё провайдерҳои шахсияти SAML.
  • Воридшавӣ иҷтимоӣ - Дастгирии Google, GitHub, Facebook, Twitter барои муайянкунии корбар.
  • Федератсияи корбарон - ҳамоҳангсозии корбарон аз серверҳои LDAP ва Active Directory ва дигар провайдерҳои шахсият.
  • Пули Kerberos - бо истифода аз сервери Kerberos барои аутентификатсияи автоматии корбар.
  • Console Admin - барои идоракунии ягонаи танзимот ва имконоти ҳалли тавассути веб.
  • Консоли идоракунии ҳисоб - барои худидоракунии профили корбар.
  • Мутобиқсозии қарор дар асоси шахсияти корпоративии ширкат.
  • 2FA Authentication - Дастгирии TOTP/HOTP бо истифода аз Google Authenticator ё FreeOTP.
  • Ҷараёни воридшавӣ - худ бақайдгирии корбар, барқарорсозӣ ва барқароркунии парол ва ғайра имконпазир аст.
  • Идоракунии сессия - маъмурон метавонанд сессияҳои корбарро аз як нуқта идора кунанд.
  • Token Mappers - атрибутҳои корбар, нақшҳо ва дигар атрибутҳои заруриро ба нишонаҳо ҳатмӣ мекунанд.
  • Идоракунии фасеҳи сиёсат дар саросари соҳа, барнома ва корбарон.
  • Дастгирии CORS - Адаптерҳои муштарӣ дорои дастгирии CORS дарунсохт мебошанд.
  • Интерфейси провайдери хидматрасон (SPI) - Шумораи зиёди SPI-ҳо, ки ба шумо имкон медиҳанд ҷанбаҳои гуногуни серверро танзим кунед: ҷараёнҳои аутентификатсия, провайдерҳои шахсият, харитасозии протокол ва ғайра.
  • Адаптерҳои муштарӣ барои барномаҳои JavaScript, WildFly, JBoss EAP, Fuse, Tomcat, Jetty, Spring.
  • Дастгирии кор бо барномаҳои гуногун, ки китобхонаи OpenID Connect Relying Party ё Китобхонаи провайдери хидматрасонии SAML 2.0 -ро дастгирӣ мекунад.
  • Бо истифода аз плагинҳо васеъ карда мешавад.

Барои равандҳои CI / CD, инчунин автоматикунонии равандҳои идоракунӣ дар Keycloak, REST API / JAVA API метавонад истифода шавад. Ҳуҷҷатҳо дар шакли электронӣ дастрасанд:

оромии API https://www.keycloak.org/docs-api/8.0/rest-api/index.html
Java API https://www.keycloak.org/docs-api/8.0/javadocs/index.html

Таъминкунандагони ҳувияти корхона (дар бино)

Имконияти тасдиқи корбарон тавассути хидматҳои Федератсияи корбарон.

SSO дар меъмории микросервис. Мо Keycloak-ро истифода мебарем. Қисми №1

Аутентификатсияи гузариш низ метавонад истифода шавад - агар корбарон бо истгоҳҳои корӣ бо Kerberos (LDAP ё AD) аутентификатсия кунанд, он гоҳ онҳо метавонанд ба таври худкор дар Keycloak бе ворид кардани номи корбар ва пароли худ дубора тасдиқ карда шаванд.

Барои аутентификатсия ва иҷозати минбаъдаи корбарон мумкин аст, ки МБМ-и релясионалиро истифода бурд, ки барои муҳити таҳия бештар мувофиқ аст, зеро он танзимоти тӯлонӣ ва ҳамгироиро дар марҳилаҳои аввали лоиҳаҳо дар бар намегирад. Бо нобаёнӣ, Keycloak DBMS-и дарунсохтро барои нигоҳ доштани танзимот ва маълумоти корбар истифода мебарад.

Рӯйхати DBMS дастгирӣшаванда васеъ буда, иборат аст аз: MS SQL, Oracle, PostgreSQL, MariaDB, Oracle ва дигарон. То ҳол аз ҳама санҷидашудаҳо Oracle 12C Release1 RAC ва кластери Galera 3.12 барои MariaDB 10.1.19 мебошанд.

Провайдерҳои шахсият - воридшавии иҷтимоӣ

Истифодаи логин аз шабакаҳои иҷтимоӣ имконпазир аст. Барои фаъол кардани қобилияти аутентификатсияи корбарон, консоли администратори Keycloack -ро истифода баред. Тағирот дар коди барнома талаб карда намешавад ва ин функсия берун аз қуттӣ дастрас аст ва метавонад дар ҳама марҳилаи лоиҳа фаъол карда шавад.

SSO дар меъмории микросервис. Мо Keycloak-ро истифода мебарем. Қисми №1

Истифодаи провайдерҳои OpenID/SAML Identity барои тасдиқи корбар имконпазир аст.

Сенарияҳои маъмулии иҷозатдиҳӣ бо истифода аз OAuth2 дар Keycloak

Раванди коди авторизатсия - бо замимаҳои сервер истифода мешавад. Яке аз намудҳои маъмултарини иҷозати авторизатсия, зеро он барои барномаҳои серверӣ мувофиқ аст, ки дар он рамзи ибтидоии барнома ва маълумоти муштарӣ барои шахсони бегона дастрас нестанд. Раванд дар ин ҳолат ба бозгардонидан асос ёфтааст. Барнома бояд қодир бошад, ки бо агенти корбар (корбар-агент), ба монанди браузери веб муошират кунад - барои гирифтани рамзҳои иҷозати API, ки тавассути агенти корбар равона карда мешавад.

ҷараёни номуайян - аз ҷониби барномаҳои мобилӣ ё веб истифода мешавад (барномаҳое, ки дар дастгоҳи корбар кор мекунанд).

Навъи иҷозати номуайян аз ҷониби барномаҳои мобилӣ ва веб истифода мешавад, ки махфияти муштарӣ кафолат дода намешавад. Навъи иҷозаи номувофиқ инчунин масири агенти корбарро истифода мебарад, ки ба воситаи он аломати дастрасӣ ба агенти корбар барои истифодаи минбаъда дар барнома интиқол дода мешавад. Ин нишонаро барои корбар ва дигар замимаҳои дастгоҳи корбар дастрас мекунад. Ин навъи иҷозати иҷозат шахсияти барномаро тасдиқ намекунад ва худи раванд ба URL-и масир (қаблан дар хидмат сабтином шуда буд) такя мекунад.

Ҷараёни номуайян токенҳои навсозии аломатҳои дастрасиро дастгирӣ намекунад.

Маълумотномаҳои мизоҷ Грант Ҷараёни — ҳангоми дастрасии барнома ба API истифода мешаванд. Ин навъи иҷозати иҷозат одатан барои ҳамкории сервер ба сервер истифода мешавад, ки бояд дар замина бидуни ҳамкории фаврии корбар иҷро карда шаванд. Ҷараёни гранти эътимодномаи муштарӣ ба хидмати веб (муштарии махфӣ) имкон медиҳад, ки ба ҷои шахсияти корбар ҳангоми занг задан ба хидмати веби дигар маълумоти эътимоднокии худро истифода барад. Барои сатҳи баландтари амният, хидмати зангзананда метавонад шаҳодатномаро (ба ҷои сирри муштарак) ҳамчун эътимоднома истифода барад.

Мушаххасоти OAuth2 дар тавсиф шудааст
RFC-6749
RFC-8252
RFC-6819

Токени JWT ва манфиатҳои он

JWT (JSON Web Token) стандарти кушода аст (https://tools.ietf.org/html/rfc7519) ки роҳи паймон ва мустақили интиқоли бехатари иттилоотро байни тарафҳо ҳамчун объекти JSON муайян мекунад.

Мувофиқи стандарт, токен аз се қисм дар формати base-64 иборат аст, ки бо нуқтаҳо ҷудо карда шудаанд. Қисми якум сарлавҳа номида мешавад, ки дар он намуди токен ва номи алгоритми ҳаш барои гирифтани имзои рақамӣ мавҷуд аст. Дар қисми дуюм маълумоти асосӣ (корбар, атрибутҳо ва ғ.) нигоҳ дошта мешавад. Қисми сеюм имзои рақамӣ мебошад.

. .
Ҳеҷ гоҳ токенро дар DB-и худ нигоҳ надоред. Азбаски аломати дуруст ба парол баробар аст, нигоҳ доштани нишона ба нигоҳ доштани парол дар матни равшан монанд аст.
Токени дастрасӣ нишонаест, ки ба соҳибаш дастрасӣ ба захираҳои сервери бехатарро медиҳад. Он одатан мӯҳлати кӯтоҳ дорад ва метавонад маълумоти иловагӣ ба монанди суроғаи IP-и тарафе, ки нишонаро дархост мекунад, дошта бошад.

Токенро навсозӣ кунед нишонаест, ки ба мизоҷон имкон медиҳад, ки пас аз ба охир расидани мӯҳлати истифодаашон аломатҳои дастрасии навро дархост кунанд. Ин нишонаҳо одатан барои муддати тӯлонӣ дода мешаванд.

Бартариҳои асосии истифода дар меъмории microservice:

  • Имконияти дастрасӣ ба барномаҳо ва хидматҳои гуногун тавассути аутентификатсияи якдафъаина.
  • Дар сурати мавҷуд набудани як қатор атрибутҳои зарурӣ дар профили корбар, имкон дорад, ки бо маълумоте, ки ба бори пурборшаванда илова карда шаванд, аз ҷумла автоматӣ ва дар вақти парвоз ғанӣ гардонида шавад.
  • Нигоҳ доштани маълумот дар бораи сессияҳои фаъол лозим нест, барномаи сервер танҳо бояд имзоро тафтиш кунад.
  • Назорати дастрасии бештар фасењ тавассути атрибутҳои иловагӣ дар бор.
  • Истифодаи имзои нишона барои сарлавҳа ва сарборӣ амнияти ҳалли онро дар маҷмӯъ афзоиш медиҳад.

Токени JWT - таркиб

Сарлавҳа - бо нобаёнӣ, сарлавҳа танҳо намуди аломат ва алгоритми барои рамзгузорӣ истифодашавандаро дар бар мегирад.

Навъи нишона дар калиди "typ" нигоҳ дошта мешавад. Калиди "намуд" дар JWT сарфи назар карда мешавад. Агар калиди "typ" мавҷуд бошад, арзиши он бояд JWT бошад, то нишон диҳад, ки ин объект JSON Web Token аст.

Калиди дуюм "alg" алгоритмеро, ки барои рамзгузории аломат истифода мешавад, муайян мекунад. Он бояд бо нобаёнӣ ба HS256 муқаррар карда шавад. Сарлавҳа дар base64 рамзгузорӣ шудааст.

{ "alg": "HS256", "намуд": "JWT"}
сарборӣ (мазмун) - сарборӣ ҳама гуна маълумотеро нигоҳ медорад, ки бояд тафтиш карда шаванд. Ҳар як калид дар сарборӣ ҳамчун "даъво" маълум аст. Масалан, шумо метавонед ба барнома танҳо бо даъват (аксияи пӯшида) ворид шавед. Вақте ки мо мехоҳем касеро ба иштирок даъват кунем, мо ба онҳо мактуби даъватӣ мефиристем. Санҷиши он муҳим аст, ки суроғаи почтаи электронӣ ба шахсе, ки даъватро қабул мекунад, тааллуқ дорад, аз ин рӯ мо ин суроғаро ба боргузорӣ дохил мекунем, барои ин мо онро дар калиди "почтаи электронӣ" нигоҳ медорем.

{ "почтаи электронӣ": "[почтаи электронӣ ҳифз карда шудааст]"}

Калидҳо дар бориши боркунӣ метавонанд худсарона бошанд. Бо вуҷуди ин, якчанд захираҳо мавҷуданд:

  • iss (Эмитент) - Барномаеро, ки аз он токен фиристода мешавад, муайян мекунад.
  • зер (мавзӯъ) - мавзӯи аломатро муайян мекунад.
  • aud (Audience) як қатор сатрҳои ҳассос ё URI мебошад, ки рӯйхати гирандагони ин нишона мебошад. Вақте ки ҷониби қабулкунанда JWT-ро бо калиди додашуда мегирад, он бояд мавҷудияти худро дар қабулкунандагон тафтиш кунад - дар акси ҳол, нишонаро сарфи назар кунад.
  • exp (Вақти тамомшавӣ) - Нишон медиҳад, ки кай ба охир мерасад. Стандарти JWT тамоми татбиқи онро талаб мекунад, ки токенҳои мӯҳлаташон гузаштаро рад кунанд. Калиди exp бояд тамғаи вақт дар формати unix бошад.
  • nbf (Не пештар) вақт дар формати unix аст, ки лаҳзаи эътибор пайдо кардани токенро муайян мекунад.
  • iat (Issued At) - Ин калид вақти баровардани токенро нишон медиҳад ва метавонад барои муайян кардани синну соли JWT истифода шавад. Калиди iat бояд тамғаи вақт дар формати unix бошад.
  • Jti (JWT ID) — сатрест, ки идентификатори ягонаи ин аломатро, ки ба ҳарфи калон ҳассос аст, муайян мекунад.

Фаҳмидани он муҳим аст, ки сарборӣ дар шакли рамзгузоришуда интиқол дода намешавад (гарчанде ки токенҳоро лона кардан мумкин аст ва пас аз он интиқол додани маълумоти рамзшуда имконпазир аст). Аз ин рӯ, он наметавонад ягон маълумоти махфиро нигоҳ дорад. Мисли сарлавҳа, сарбории пардохтӣ base64 рамзгузорӣ шудааст.
Имзои - Вақте ки мо унвон ва бор дорем, мо метавонем имзоро ҳисоб кунем.

Base64-рамзгузорӣ шудааст: сарлавҳа ва сарборӣ гирифта мешаванд, онҳо ба як сатр тавассути нуқта муттаҳид карда мешаванд. Сипас ин сатр ва калиди махфӣ ба алгоритми рамзгузорӣ, ки дар сарлавҳа нишон дода шудааст (калиди "alg") ворид карда мешаванд. Калид метавонад ҳама гуна сатр бошад. Сатрҳои дарозтар бартарӣ дода мешаванд, зеро барои гирифтани он вақти зиёдтар лозим аст.

{"alg":"RSA1_5","борбори":"A128CBC-HS256"}

Сохтани меъмории кластерии Keycloak Failover

Ҳангоми истифодаи кластери ягона барои ҳамаи лоиҳаҳо, талабот ба ҳалли SSO зиёд мешавад. Вақте ки шумораи лоиҳаҳо кам аст, ин талаботҳо барои ҳама лоиҳаҳо чандон назаррас нестанд, аммо бо афзоиши шумораи корбарон ва ҳамгироӣ, талабот ба дастрасӣ ва самаранокӣ зиёд мешавад.

Баланд бардоштани хатари нокомии ягонаи SSO талаботро ба меъмории ҳалли масъала ва усулҳои барои ҷузъҳои зиёдатӣ истифодашаванда зиёд мекунад ва боиси SLA хеле қатъӣ мегардад. Дар робита ба ин, аксар вақт дар марҳилаи таҳия ё марҳилаҳои аввали татбиқи қарорҳо лоиҳаҳо дорои инфрасохтори ба хатогиҳои худ тобовар нестанд. Дар баробари пешравии рушд, зарур аст, ки имкониятҳо барои рушд ва миқёс фароҳам оварда шаванд. Бо истифода аз виртуализатсияи контейнер ё равиши гибридӣ сохтани кластери бебозгашт чандиртар аст.

Барои кор дар шеваҳои кластери фаъол/фаъол ва фаъол/фаъол, таъмини мувофиқати додаҳо дар пойгоҳи релятсионӣ лозим аст - ҳарду гиреҳи пойгоҳи додаҳо бояд дар байни марказҳои гуногуни гео-тақсимшуда синхронӣ такрор карда шаванд.

Намунаи оддитарини насби ба хатогиҳо тобовар.

SSO дар меъмории микросервис. Мо Keycloak-ро истифода мебарем. Қисми №1

Бартариҳои истифодаи як кластер чист:

  • Дастрасӣ ва иҷрои баланд.
  • Дастгирии шеваҳои корӣ: фаъол / фаъол, фаъол / ғайрифаъол.
  • Қобилияти миқёси динамикӣ - ҳангоми истифодаи виртуализатсияи контейнер.
  • Имконияти идоракунии мутамарказ ва мониторинг.
  • Муносибати ягона барои муайянсозӣ/атентификатсия/иҷозати корбарон дар лоиҳаҳо.
  • Ҳамкории шаффофтар байни лоиҳаҳои гуногун бе иштироки корбарон.
  • Имконияти дубора истифода бурдани аломати JWT дар лоиҳаҳои гуногун.
  • Як нуқтаи эътимод.
  • Оғози зудтари лоиҳаҳо бо истифода аз микросервисҳо/виртуализатсияи контейнерҳо (ҳоҷати бардоштан ва танзим кардани ҷузъҳои иловагӣ нест).
  • Аз фурӯшанда дастгирии тиҷоратӣ харидан мумкин аст.

Ҳангоми банақшагирии кластер чиро бояд ҷустуҷӯ кард

DBMS

Keycloak системаи идоракунии пойгоҳи додаҳоро барои нигоҳдорӣ истифода мебарад: заминҳо, мизоҷон, корбарон ва ғайра.
Доираи васеи DBMS дастгирӣ карда мешавад: MS SQL, Oracle, MySQL, PostgreSQL. Keycloak бо пойгоҳи додаи реляционии дохилии худ меояд. Тавсия дода мешавад, ки барои муҳитҳои пурборшуда истифода шавад - ба монанди муҳити таҳия.

Барои кор дар шеваҳои кластери фаъол/фаъол ва фаъол/фаъол, мутобиқати додаҳо дар пойгоҳи додаҳои релятсионӣ лозим аст ва ҳарду гиреҳи кластери пойгоҳи додаҳо дар байни марказҳои додаҳо синхронӣ такрор карда мешаванд.

Кэши тақсимшуда (Infinspan)

Барои дуруст кор кардани кластер, ҳамоҳангсозии иловагии намудҳои кэшҳо бо истифода аз JBoss Data Grid лозим аст:

Сеансҳои аутентификатсия - барои нигоҳ доштани маълумот ҳангоми тасдиқи корбари мушаххас истифода мешавад. Дархостҳо аз ин кэш маъмулан танҳо браузер ва сервери Keycloak-ро дар бар мегиранд, на барнома.

Токенҳои амал барои сенарияҳое истифода мешаванд, ки корбар бояд амалро ба таври асинхронӣ тасдиқ кунад (тавассути почтаи электронӣ). Масалан, ҳангоми ҷараёни фаромӯш кардани парол, кэши actionTokens Infinispan барои пайгирии метамаълумот дар бораи аломатҳои амали алоқаманде, ки аллакай истифода шудаанд, истифода мешавад, аз ин рӯ онро дубора истифода бурдан мумкин нест.

Кэш ва беэътибор донистани маълумоти доимӣ - барои кэш кардани маълумоти доимӣ барои пешгирӣ кардани дархостҳои нолозим ба пойгоҳи додаҳо истифода мешавад. Вақте ки ягон сервери Keycloak маълумотро навсозӣ мекунад, ҳама серверҳои дигари Keycloak дар ҳама марказҳои додаҳо бояд дар бораи ин маълумот донанд.

Кор - Танҳо барои фиристодани паёмҳои беэътибор байни гиреҳҳои кластер ва марказҳои додаҳо истифода мешавад.

Сеансҳои корбар - барои нигоҳ доштани маълумот дар бораи сессияҳои корбар, ки дар давоми сеанси браузери корбар эътибор доранд, истифода мешавад. Кэш бояд дархостҳои HTTP-ро аз корбари ниҳоӣ ва барнома коркард кунад.

Муҳофизати қувваи бераҳмона - барои пайгирии маълумот дар бораи воридшавии ноком истифода мешавад.

Мувозинати сарборӣ

Тавозуни сарборӣ нуқтаи ягонаи вуруд ба клавиатура аст ва бояд ҷаласаҳои часпандаро дастгирӣ кунад.

Серверҳои барномаҳо

Онҳо барои назорати ҳамкории ҷузъҳо бо ҳамдигар истифода мешаванд ва метавонанд бо истифода аз абзорҳои мавҷудаи автоматикунонӣ ва миқёси динамикии абзорҳои автоматикунонии инфрасохтор виртуалӣ ё контейнерӣ карда шаванд. Сенарияҳои маъмултарини густариш дар OpenShift, Kubernates, Rancher.

Бо хамин кисми якум — кисми назариявй ба охир мерасад. Дар силсилаи мақолаҳои навбатӣ, намунаҳои ҳамгироӣ бо провайдерҳои гуногуни шахсият ва намунаҳои танзимот таҳлил карда мешаванд.

Манбаъ: will.com

Илова Эзоҳ