SSO Π½Π° микросСрвисна Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°. ИзползвамС Keycloak. Част β„–1

Π’ΡŠΠ² всяка голяма компания, ΠΈ X5 Retail Group Π½Π΅ Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, с Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° нараства ΠΈ броят Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ‚Π΅, Π² ΠΊΠΎΠΈΡ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° авторизация Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ. Π‘ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ сС изисква Π±Π΅Π·ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅Π½ ΠΏΡ€Π΅Ρ…ΠΎΠ΄ Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ ΠΎΡ‚ Π΅Π΄Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Π΄Ρ€ΡƒΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³Π°Π²Π° сС появява нСобходимостта ΠΎΡ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π΅Π΄ΠΈΠ½Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° Single-Sign-On (SSO). Но ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΏΡ€Π°Π²ΠΈΠΌ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΠΈ доставчици ΠΊΠ°Ρ‚ΠΎ AD ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ нямат Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ, Π²Π΅Ρ‡Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ? На ΠΏΠΎΠΌΠΎΡ‰ ΠΈΠ΄Π²Π° ΠΊΠ»Π°ΡΡŠΡ‚ систСми, Π½Π°Ρ€Π΅Ρ‡Π΅Π½ β€žΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΠΈ Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΈβ€œ. Най-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΈΡ‚Π΅ ΠΎΡ‚ тях са прСдставитСли ΠΊΠ°Ρ‚ΠΎ Keycloak, Gravitee Access management ΠΈ Π΄Ρ€. Най-чСсто сцСнарии Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ: машинно взаимодСйствиС, участиС Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ ΠΈ Π΄Ρ€. Π Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ трябва Π΄Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° гъвкав ΠΈ ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π», способСн Π΄Π° ΠΎΠ±Π΅Π΄ΠΈΠ½ΠΈ всички изисквания Π½Π° Π΅Π΄Π½ΠΎ място, Π° Ρ‚Π°ΠΊΠΎΠ²Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π² Π½Π°ΡˆΠ°Ρ‚Π° компания Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π΅ идСнтификационният Π±Ρ€ΠΎΠΊΠ΅Ρ€ – Keycloak.

SSO Π½Π° микросСрвисна Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°. ИзползвамС Keycloak. Част β„–1

Keycloak Π΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Π·Π° идСнтификация ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ° ΠΈ сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΎΡ‚ компанията RedHat. Π’ΠΎΠΉ Π΅ основата Π·Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΡ‚Π΅ Π½Π° компанията, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ SSO – RH-SSO.

Основни понятия

ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ Π΄Π° Ρ€Π°Π·Π±ΠΈΡ€Π°ΠΌΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΡ‚Π° ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚Π΅, трябва Π΄Π° сС ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ‚Π΅ ΠΈ Π² послСдоватСлността Π½Π° процСситС:

SSO Π½Π° микросСрвисна Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°. ИзползвамС Keycloak. Част β„–1

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ β€” Ρ‚ΠΎΠ²Π° Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°Ρ‚Π° Π·Π° Ρ€Π°Π·ΠΏΠΎΠ·Π½Π°Π²Π°Π½Π΅ Π½Π° субСкта ΠΏΠΎ нСговия ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ (ΠΏΠΎ-просто ΠΊΠ°Π·Π°Π½ΠΎ, Ρ‚ΠΎΠ²Π° Π΅ опрСдСлянС Π½Π° ΠΈΠΌΠ΅Ρ‚ΠΎ, потрСбитСлското ΠΈΠΌΠ΅ ΠΈΠ»ΠΈ Π½ΠΎΠΌΠ΅Ρ€Π°).

АутСнтикация – Ρ‚ΠΎΠ²Π° Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°Ρ‚Π° Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° автСнтичността (потрСбитСлят сС провСрява с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΏΠ°Ρ€ΠΎΠ»Π°, писмото сС провСрява ΠΏΠΎ Π΅Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π΅Π½ подпис ΠΈ Ρ‚.Π½.)

Авторизация – Ρ‚ΠΎΠ²Π° Π΅ прСдоставянС Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ рСсурс (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄ΠΎ Π΅Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Π° ΠΏΠΎΡ‰Π°).

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΠΈΡΡ‚ Π±Ρ€ΠΎΠΊΠ΅Ρ€ Keycloak

Keycloak β€” Ρ‚ΠΎΠ²Π° Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° идСнтификация ΠΈ Π΄ΠΎΡΡ‚ΡŠΠΏ с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΈ систСми, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° микросСрвисна Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°.

Keycloak ΠΏΡ€Π΅Π΄Π»Π°Π³Π° Ρ‚Π°ΠΊΠΈΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°Ρ‚ΠΎ Π΅Π΄ΠΈΠ½Π΅Π½ Π²Ρ…ΠΎΠ΄ (SSO), брокСрска идСнтификация ΠΈ социално Π²Π»ΠΈΠ·Π°Π½Π΅, фСдСрация Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ, клиСнтски Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΈ, администраторска ΠΊΠΎΠ½Π·ΠΎΠ»Π° ΠΈ ΠΊΠΎΠ½Π·ΠΎΠ»Π° Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π°ΠΊΠ°ΡƒΠ½Ρ‚ΠΈ.

ΠžΡΠ½ΠΎΠ²Π½ΠΈΡΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π», ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½ Π² Keycloak:

  • Single-Sign On ΠΈ Single-Sign Out Π·Π° Π±Ρ€Π°ΡƒΠ·ΡŠΡ€Π½ΠΈ прилоТСния.
  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° OpenID/OAuth 2.0/SAML.
  • Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π΅Π½ Π±Ρ€ΠΎΠΊΠ΅Ρ€ – удостовСряванС Ρ‡Ρ€Π΅Π· външни доставчици Π½Π° идСнтичност OpenID Connect ΠΈΠ»ΠΈ SAML.
  • Π‘ΠΎΡ†ΠΈΠ°Π»Π½ΠΎ Π²Π»ΠΈΠ·Π°Π½Π΅ – ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Google, GitHub, Facebook, Twitter Π·Π° идСнтификация Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅.
  • ОбСдиняванС Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ – синхронизиранС Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ ΠΎΡ‚ LDAP ΠΈ Active Directory ΡΡŠΡ€Π²ΡŠΡ€ΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ доставчици Π½Π° идСнтичност.
  • ΠœΠΎΡΡ‚ Π½Π° Kerberos – ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Kerberos ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ удостовСряванС Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅.
  • Административна ΠΊΠΎΠ½Π·ΠΎΠ»Π° β€” Π·Π° Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° настройкитС ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Ρ‡Ρ€Π΅Π· ΡƒΠ΅Π±.
  • Конзола Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π°ΠΊΠ°ΡƒΠ½Ρ‚ΠΈ – Π·Π° самостоятСлно ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΎΡ„ΠΈΠ»Π° Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅.
  • ΠŸΠ΅Ρ€ΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° корпоративния стил.
  • 2FA удостовСряванС – ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° TOTP/HOTP Ρ‡Ρ€Π΅Π· Google Authenticator ΠΈΠ»ΠΈ FreeOTP.
  • ΠŸΡ€ΠΎΡ†Π΅ΡΠΈ Π½Π° Π²Π»ΠΈΠ·Π°Π½Π΅ – възмоТна Π΅ саморСгистрация Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅, Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ ΠΈ Π½ΡƒΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΠ°Ρ€ΠΎΠ»Π° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ.
  • Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° сСсии – администраторитС ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° управляват сСсиитС Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ ΠΎΡ‚ Π΅Π΄ΠΈΠ½Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ°.
  • Token Mappers – ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ, Ρ€ΠΎΠ»ΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ Π² Ρ‚ΠΎΠΊΠ΅Π½ΠΈ.
  • Π“ΡŠΠ²ΠΊΠ°Π²ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈΡ‚Π΅ Ρ‡Ρ€Π΅Π· realm, application ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ.
  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° CORS – клиСнтскитС Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΈ ΠΈΠΌΠ°Ρ‚ Π²Π³Ρ€Π°Π΄Π΅Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° CORS.
  • Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΠΈ Π·Π° прСдоставянС Π½Π° услуги (SPI) – голям Π±Ρ€ΠΎΠΉ SPI, позволяващи ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ аспСкти Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° ΡΡŠΡ€Π²Π΅Ρ€Π°: ΠΏΠΎΡ‚ΠΎΡ†ΠΈ Π½Π° удостовСряванС, доставчици Π½Π° идСнтичност, сопоставянС Π½Π° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ.
  • ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΈ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΈ Π·Π° JavaScript прилоТСния, WildFly, JBoss EAP, Fuse, Tomcat, Jetty, Spring.
  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ прилоТСния, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ OpenID Connect Relying Party library ΠΈΠ»ΠΈ SAML 2.0 Service Provider Library.
  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ‡Ρ€Π΅Π· plugins.

Π—Π° процСситС CI/CD, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ автоматизация Π½Π° управлСнскитС процСси Π² Keycloak, ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° REST API/JAVA API. ДокумСнтацията Π΅ Π½Π°Π»ΠΈΡ‡Π½Π° Π² Π΅Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π΅Π½ Π²ΠΈΠ΄:

REST 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

Доставчици Π½Π° идСнтичност Π½Π° Π½ΠΈΠ²ΠΎ прСдприятиС (On-Premise)

Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° удостовСряванС Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ Ρ‡Ρ€Π΅Π· услуги Π·Π° обСдиняванС Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ.

SSO Π½Π° микросСрвисна Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°. ИзползвамС Keycloak. Част β„–1

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΎ удостовСряванС – Π°ΠΊΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ сС удостовСряват Π½Π° Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ станции с Kerberos (LDAP ΠΈΠ»ΠΈ AD), Ρ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ удостовСрСни Π² Keycloak, Π±Π΅Π· Π΄Π° Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚Π½ΠΎΠ²ΠΎ Π΄Π° Π·Π°Π΄Π°Π²Π°Ρ‚ ΠΈΠΌΠ΅Ρ‚ΠΎ си ΠΈ ΠΏΠ°Ρ€ΠΎΠ»Π°Ρ‚Π°.

Π—Π° удостовСряванС ΠΈ ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΡˆΠ½ΠΎ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ€Π΅Π»Π°Ρ†ΠΈΠΎΠ½Π½Π° Π‘Π£Π‘Π”, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ Π½Π°ΠΉ-подходящо Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‰ΠΈ срСди, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π½Π΅ изисква дълги настройки ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Π² Ρ€Π°Π½Π½ΠΈΡ‚Π΅ Π΅Ρ‚Π°ΠΏΠΈ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ‚Π΅. По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π² Keycloak сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π²Π³Ρ€Π°Π΄Π΅Π½Π° Π‘Π£Π‘Π” Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° настройки ΠΈ Π΄Π°Π½Π½ΠΈ Π·Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅.

Π‘ΠΏΠΈΡΡŠΠΊΡŠΡ‚ Π½Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½ΠΈΡ‚Π΅ Π‘Π£Π‘Π” Π΅ ΠΎΠ±ΡˆΠΈΡ€Π΅Π½ ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π²Π°: MS SQL, Oracle, PostgreSQL, MariaDB, Oracle ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ. Най-тСстирани към ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° са Oracle 12C Release1 RAC ΠΈ Galera 3.12 ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ Π·Π° MariaDB 10.1.19.

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΠΈ доставчици β€” социално Π²Π»ΠΈΠ·Π°Π½Π΅

Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π²Ρ…ΠΎΠ΄ ΠΎΡ‚ социални ΠΌΡ€Π΅ΠΆΠΈ. Π—Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅ Π½Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° удостовСряванС Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° консолата Π½Π° администратора Π½Π° Keycloak. Няма Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ΄Π° Π½Π° прилоТСнията ΠΈ Ρ‚Π°Π·ΠΈ функционалност Π΅ Π½Π°Π»ΠΈΡ‡Π½Π° "ΠΎΡ‚ кутията" ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π° Π½Π° всяка Ρ„Π°Π·Π° Π½Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

SSO Π½Π° микросСрвисна Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°. ИзползвамС Keycloak. Част β„–1

Π—Π° удостовСряванС Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ OpenID/SAML ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΠΈ доставчици.

Π’ΠΈΠΏΠΈΡ‡Π½ΠΈ сцСнарии Π·Π° авторизация с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° OAuth2 Π² Keycloak

ΠŸΠΎΡ‚ΠΎΠΊ Π½Π° ΠΊΠΎΠ΄ Π·Π° авторизация β€” ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° сС с прилоТСния Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° (server-side applications). Π•Π΄ΠΈΠ½ ΠΎΡ‚ Π½Π°ΠΉ-разпространСнитС Ρ‚ΠΈΠΏΠΎΠ²Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π° авторизация, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π΅ подходящ Π·Π° ΡΡŠΡ€Π²ΡŠΡ€Π½ΠΈ прилоТСния, ΠΏΡ€ΠΈ ΠΊΠΎΠΈΡ‚ΠΎ изходният ΠΊΠΎΠ΄ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π½Π΅ са Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ Π·Π° Ρ‚Ρ€Π΅Ρ‚ΠΈ Π»ΠΈΡ†Π°. ΠŸΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ Π² Ρ‚ΠΎΠ·ΠΈ случай сС ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π° Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° прСнасочванС (redirection). ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ трябва Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° взаимодСйства с потрСбитСлския Π°Π³Π΅Π½Ρ‚ (user-agent), Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΡƒΠ΅Π± Π±Ρ€Π°ΡƒΠ·ΡŠΡ€ – Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° ΠΊΠΎΠ΄ΠΎΠ²Π΅ Π·Π° авторизация Π½Π° API, прСнасочвани ΠΏΡ€Π΅Π· потрСбитСлския Π°Π³Π΅Π½Ρ‚.

Π˜ΠΌΠΏΠ»ΠΈΡ†ΠΈΡ‚Π΅Π½ ΠΏΠΎΡ‚ΠΎΠΊ β€” ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° сС ΠΎΡ‚ ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈ ΠΈΠ»ΠΈ ΡƒΠ΅Π± прилоТСния (прилоТСния, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ Π½Π° устройството Π½Π° потрСбитСля).

НСявният Ρ‚ΠΈΠΏ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π° удостовСряванС сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡ‚ ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈ ΠΈ ΡƒΠ΅Π± прилоТСния, ΠΏΡ€ΠΈ ΠΊΠΎΠΈΡ‚ΠΎ конфидСнциалността Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°Π½Π°. НСявният Ρ‚ΠΈΠΏ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° прСнасочванС Π½Π° потрСбитСлския Π°Π³Π΅Π½Ρ‚, ΠΏΡ€ΠΈ ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‚ΠΎΠΊΠ΅Π½ΡŠΡ‚ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ сС ΠΏΡ€Π΅Π΄Π°Π²Π° Π½Π° потрСбитСлския Π°Π³Π΅Π½Ρ‚, Π·Π° Π΄Π° бъдС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. Π’ΠΎΠ²Π° ΠΏΡ€Π°Π²ΠΈ Ρ‚ΠΎΠΊΠ΅Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ Π·Π° потрСбитСля ΠΈ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈ прилоТСния Π½Π° устройството. ΠŸΡ€ΠΈ Ρ‚ΠΎΠ·ΠΈ Ρ‚ΠΈΠΏ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π° удостовСряванС Π½Π΅ сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° автСнтикация Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, Π° самият процСс Ρ€Π°Π·Ρ‡ΠΈΡ‚Π° Π½Π° URL прСнасочванСто (рСгистрирано ΠΏΡ€Π΅Π΄ΠΈ Π² услугата).

НСявният ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° Ρ‚ΠΎΠΊΠ΅Π½ΠΈ Π·Π° обновяванС Π½Π° Ρ‚ΠΎΠΊΠ΅Π½Π° Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ.

ΠŸΠΎΡ‚ΠΎΠΊ Π½Π° удостовСряванС с клиСнтски ΠΊΡ€Π΅Π΄Π΅Π½Ρ‚ΠΈΠ°Π»ΠΈ β€” сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ API. Π’ΠΎΠ·ΠΈ Ρ‚ΠΈΠΏ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° взаимодСйствия "ΡΡŠΡ€Π²ΡŠΡ€-ΡΡŠΡ€Π²ΡŠΡ€", ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ във Ρ„ΠΎΠ½ΠΎΠ² Ρ€Π΅ΠΆΠΈΠΌ Π±Π΅Π· Π½Π΅Π·Π°Π±Π°Π²Π½Π° намСса ΠΎΡ‚ потрСбитСля. ΠŸΠΎΡ‚ΠΎΠΊΡŠΡ‚ Π½Π° прСдоставянС Π½Π° клиСнтски ΠΊΡ€Π΅Π΄Π΅Π½Ρ‚ΠΈΠ°Π»ΠΈ позволява Π½Π° ΡƒΠ΅Π± услугата (ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»Π΅Π½ ΠΊΠ»ΠΈΠ΅Π½Ρ‚) Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° собствСнитС си ΠΊΡ€Π΅Π΄Π΅Π½Ρ‚ΠΈΠ°Π»ΠΈ вмСсто удостовСряванС Π½Π° потрСбитСля Π·Π° Π²Π΅Ρ€ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½Π΅ ΠΏΡ€ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° Π΄Ρ€ΡƒΠ³Π° ΡƒΠ΅Π± услуга. Π—Π° ΠΏΠΎ-високо Π½ΠΈΠ²ΠΎ Π½Π° сигурност Π΅ възмоТно ΠΈΠ·Π²ΠΈΠΊΠ²Π°Ρ‰Π°Ρ‚Π° услуга Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° сСртификат (вмСсто сподСлСната Ρ‚Π°ΠΉΠ½Π°) ΠΊΠ°Ρ‚ΠΎ ΠΊΡ€Π΅Π΄Π΅Π½Ρ‚ΠΈΠ°Π».

БпСцификацията Π½Π° OAuth2 Π΅ описана Π²
RFC-6749
RFC-8252
RFC-6819

JWT Ρ‚ΠΎΠΊΠ΅Π½ ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΡ‚Π΅ прСдимства

JWT (JSON Web Token) Π΅ ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ стандарт (https://tools.ietf.org/html/rfc7519), ΠΊΠΎΠΉΡ‚ΠΎ опрСдСля ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π΅Π½ ΠΈ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ΅Π½ Π½Π°Ρ‡ΠΈΠ½ Π·Π° сигурна ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ Π½Π° информация ΠΌΠ΅ΠΆΠ΄Ρƒ странитС ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° JSON ΠΎΠ±Π΅ΠΊΡ‚.

Π‘ΠΏΠΎΡ€Π΅Π΄ стандарта, Ρ‚ΠΎΠΊΠ΅Π½ΡŠΡ‚ сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ Ρ‚Ρ€ΠΈ части Π² base-64 Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈ с Ρ‚ΠΎΡ‡ΠΊΠΈ. ΠŸΡŠΡ€Π²Π°Ρ‚Π° част сС Π½Π°Ρ€ΠΈΡ‡Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ (header), Π² ΠΊΠΎΠ΅Ρ‚ΠΎ сС ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Ρ‚ΠΈΠΏΡŠΡ‚ Π½Π° Ρ‚ΠΎΠΊΠ΅Π½Π° ΠΈ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Ρ…Π΅Ρˆ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΠ° Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ†ΠΈΡ„Ρ€ΠΎΠ²Π°Ρ‚Π° подпис. Π’Ρ‚ΠΎΡ€Π°Ρ‚Π° част ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° основната информация (ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π», Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ ΠΈ Ρ‚.Π½.). Π’Ρ€Π΅Ρ‚Π°Ρ‚Π° част – Ρ†ΠΈΡ„Ρ€ΠΎΠ²Π°Ρ‚Π° подпис.

..
Никога Π½Π΅ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°ΠΉΡ‚Π΅ Ρ‚ΠΎΠΊΠ΅Π½Π° Π² Π±Π°Π·Π°Ρ‚Π° си Π΄Π°Π½Π½ΠΈ. Въй ΠΊΠ°Ρ‚ΠΎ валидният Ρ‚ΠΎΠΊΠ΅Π½ Π΅ Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π΅Π½ Π½Π° ΠΏΠ°Ρ€ΠΎΠ»Π°, ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠΊΠ΅Π½ Π΅ всС Π΅Π΄Π½ΠΎ Π΄Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚Π΅ ΠΏΠ°Ρ€ΠΎΠ»Π° Π² ΠΎΡ‚ΠΊΡ€ΠΈΡ‚ Π²ΠΈΠ΄.
Access-Ρ‚ΠΎΠΊΠ΅Π½ β€” Ρ‚ΠΎΠ²Π° Π΅ Ρ‚ΠΎΠΊΠ΅Π½, ΠΊΠΎΠΉΡ‚ΠΎ прСдоставя Π½Π° притСТатСля си Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Π·Π°Ρ‰ΠΈΡ‚Π΅Π½ΠΈ рСсурси Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°. ОбикновСно Ρ‚ΠΎΠΉ ΠΈΠΌΠ° ΠΊΡ€Π°Ρ‚ΡŠΠΊ срок Π½Π° годност ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° информация, ΠΊΠ°Ρ‚ΠΎ IP адрСса Π½Π° страната, която иска Ρ‚ΠΎΠ·ΠΈ Ρ‚ΠΎΠΊΠ΅Π½.

Refresh Ρ‚ΠΎΠΊΠ΅Π½ β€” Ρ‚ΠΎΠ²Π° Π΅ Ρ‚ΠΎΠΊΠ΅Π½, ΠΊΠΎΠΉΡ‚ΠΎ позволява Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅ Π΄Π° искат Π½ΠΎΠ²ΠΈ access Ρ‚ΠΎΠΊΠ΅Π½ΠΈ слСд ΠΈΠ·Ρ‚ΠΈΡ‡Π°Π½Π΅Ρ‚ΠΎ Π½Π° тСхния срок. Π’Π΅Π·ΠΈ Ρ‚ΠΎΠΊΠ΅Π½ΠΈ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ сС ΠΈΠ·Π΄Π°Π²Π°Ρ‚ Π·Π° дълъг ΠΏΠ΅Ρ€ΠΈΠΎΠ΄.

Основни прСдимства ΠΎΡ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π² микросСрвисна Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°:

  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ прилоТСния ΠΈ услуги Ρ‡Ρ€Π΅Π· Π΅Π΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½Π° автСнтикация.
  • ΠŸΡ€ΠΈ липса Π½Π° Ρ€Π΅Π΄ΠΈΡ†Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ Π² ΠΏΡ€ΠΎΡ„ΠΈΠ»Π° Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ Π΅ възмоТно обогатяванС Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΎ Π² ΠΏΠΎΠ»Π΅Π·Π½Π°Ρ‚Π° Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ°, Π² Ρ‚ΠΎΠ²Π° число ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ ΠΈ "Π½Π° Π»Π΅Ρ‚ΠΎ".
  • НС Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½Π΅ Π½Π° информация Π·Π° Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈ сСсии, ΡΡŠΡ€Π²ΡŠΡ€Π½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ трябва само Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈ подписа.
  • По-гъвкаво ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ° Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ Π² ΠΏΠΎΠ»Π΅Π·Π½Π°Ρ‚Π° Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ°.
  • Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° подпис Π·Π° Ρ‚ΠΎΠΊΠ΅Π½Π° Π·Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅Ρ‚ΠΎ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Π°Ρ‚Π° Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π° сигурността Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΊΠ°Ρ‚ΠΎ цяло.

JWT Ρ‚ΠΎΠΊΠ΅Π½ β€” ΡΡŠΡΡ‚Π°Π²

Π—Π°Π³Π»Π°Π²ΠΈΠ΅Ρ‚ΠΎ β€” ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π·Π°Π³Π»Π°Π²ΠΈΠ΅Ρ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° само Ρ‚ΠΈΠΏΠ° Π½Π° Ρ‚ΠΎΠΊΠ΅Π½Π° ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΠ°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π·Π° ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π΅.

Π’ΠΈΠΏΡŠΡ‚ Ρ‚ΠΎΠΊΠ΅Π½ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π² ΠΊΠ»ΡŽΡ‡Π° "typ". ΠšΠ»ΡŽΡ‡ΡŠΡ‚ "typ" сС ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π° Π² JWT. Ако ΠΊΠ»ΡŽΡ‡ΡŠΡ‚ "typ" ΠΏΡ€ΠΈΡΡŠΡΡ‚Π²Π°, Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° стойност трябва Π΄Π° бъдС JWT, Π·Π° Π΄Π° посочи, Ρ‡Π΅ Ρ‚ΠΎΠ·ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ Π΅ JSON Web Token.

Вторият ΠΊΠ»ΡŽΡ‡ "alg" опрСдСля Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΠ°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π·Π° ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π΅ Π½Π° Ρ‚ΠΎΠΊΠ΅Π½Π°. По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Ρ‚ΠΎΠΉ трябва Π΄Π° бъдС настроСн Π½Π° HS256. Π—Π°Π³Π»Π°Π²ΠΈΠ΅Ρ‚ΠΎ Π΅ ΠΊΠΎΠ΄ΠΈΡ€Π°Π½ΠΎ Π² base64.

{ "alg": "HS256", "typ": "JWT"}
Payload (ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅) β€” Π² ΠΏΠΎΠ»Π΅Π·Π½Π°Ρ‚Π° Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° всяка информация, която трябва Π΄Π° бъдС ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π°. ВсСки ΠΊΠ»ΡŽΡ‡ Π² ΠΏΠΎΠ»Π΅Π·Π½Π°Ρ‚Π° Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π΅ извСстСн ΠΊΠ°Ρ‚ΠΎ "заявлСниС". НапримСр, Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π²Π»Π΅Π·Π΅ само ΠΏΠΎ ΠΏΠΎΠΊΠ°Π½Π° (Π·Π°Ρ‚Π²ΠΎΡ€Π΅Π½ΠΎ ΠΏΡ€ΠΎΠΌΠΎ). ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΆΠ΅Π»Π°Π΅ΠΌ Π΄Π° ΠΏΠΎΠΊΠ°Π½ΠΈΠΌ някого Π΄Π° участва, Π½ΠΈΠ΅ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°ΠΌΠ΅ ΠΈΠΌΠ΅ΠΉΠ» с ΠΏΠΎΠΊΠ°Π½Π°Ρ‚Π°. Π’Π°ΠΆΠ½ΠΎ Π΅ Π΄Π° сС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈ, Ρ‡Π΅ Π΅Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Π°Ρ‚Π° ΠΏΠΎΡ‰Π° ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈ Π½Π° Ρ‡ΠΎΠ²Π΅ΠΊΠ°, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΏΠΎΠΊΠ°Π½Π°Ρ‚Π°, Π·Π°Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΠΌ Ρ‚ΠΎΠ·ΠΈ адрСс Π² ΠΏΠΎΠ»Π΅Π·Π½Π°Ρ‚Π° Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ°, ΠΊΠ°Ρ‚ΠΎ Π³ΠΎ Π·Π°ΠΏΠ°Π·ΠΈΠΌ Π² ΠΊΠ»ΡŽΡ‡Π° "e-mail".

{ "email": "example@x5.ru" }

ΠšΠ»ΡŽΡ‡ΠΎΠ²Π΅Ρ‚Π΅ Π² payload ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ. ВсС ΠΏΠ°ΠΊ, ΠΈΠΌΠ° няколко Π·Π°ΠΏΠ°Π·Π΅Π½ΠΈ:

  • iss (Issuer) β€” опрСдСля ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΎΡ‚ ΠΊΠΎΠ΅Ρ‚ΠΎ сС ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° Ρ‚ΠΎΠΊΠ΅Π½ΡŠΡ‚.
  • sub (Subject) β€” опрСдСляСма Ρ‚Π΅ΠΌΠ°Ρ‚Π° Π½Π° Ρ‚ΠΎΠΊΠ΅Π½Π°.
  • aud (Audience) – масив ΠΎΡ‚ чувствитСлни Π½Π° Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€ Π½ΠΈΠ·ΠΎΠ²Π΅ ΠΈΠ»ΠΈ URI, прСдставляващ списъка Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΠΈΡ‚Π΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ Ρ‚ΠΎΠΊΠ΅Π½. ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‰Π°Ρ‚Π° страна ΠΏΠΎΠ»ΡƒΡ‡ΠΈ JWT с Ρ‚ΠΎΠ·ΠΈ ΠΊΠ»ΡŽΡ‡, тя трябва Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈ Π΄Π°Π»ΠΈ Π΅ срСд ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΠΈΡ‚Π΅ β€” Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π΅Π½ случай Ρ‚ΠΎΠΊΠ΅Π½ΡŠΡ‚ трябва Π΄Π° бъдС ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°Π½.
  • exp (Expiration Time) β€” ΡƒΠΊΠ°Π·Π²Π°, ΠΊΠΎΠ³Π° ΠΈΠ·Ρ‚ΠΈΡ‡Π° ΡΡ€ΠΎΠΊΡŠΡ‚ Π½Π° валидност Π½Π° ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π°. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ΡŠΡ‚ JWT изисква всички Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΈ с ΠΈΠ·Ρ‚Π΅ΠΊΡŠΠ» срок Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΎΡ‚Ρ…Π²ΡŠΡ€Π»ΡΠ½ΠΈ. ΠšΠ»ΡŽΡ‡ΡŠΡ‚ Exp трябва Π΄Π° Π΅ Π²Ρ€Π΅ΠΌΠ΅Π²Π° ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π² unix Ρ„ΠΎΡ€ΠΌΠ°Ρ‚.
  • nbf (Not Before) β€” Ρ‚ΠΎΠ²Π° Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π² unix Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, опрСдСлящо ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ‚ΠΎΠΊΠ΅Π½ΡŠΡ‚ Ρ‰Π΅ станС Π²Π°Π»ΠΈΠ΄Π΅Π½.
  • iat (Issued At) β€” Ρ‚ΠΎΠ·ΠΈ ΠΊΠ»ΡŽΡ‡ прСдставлява Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΡŠΡ‚ Π΅ ΠΈΠ·Π΄Π°Π΄Π΅Π½ ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° опрСдСлянС Π½Π° Π²ΡŠΠ·Ρ€Π°ΡΡ‚Ρ‚Π° Π½Π° JWT. ΠšΠ»ΡŽΡ‡ΡŠΡ‚ iat трябва Π΄Π° Π΅ Π²Ρ€Π΅ΠΌΠ΅Π²Π° ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π² unix Ρ„ΠΎΡ€ΠΌΠ°Ρ‚.
  • Jti (JWT ID) β€” Π½ΠΈΠ·, опрСдСлящ ΡƒΠ½ΠΈΠΊΠ°Π»Π΅Π½ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° Ρ‚ΠΎΠ·ΠΈ Ρ‚ΠΎΠΊΠ΅Π½ с ΠΎΠ³Π»Π΅Π΄ Π½Π° рСгистра.

Π’Π°ΠΆΠ½ΠΎ Π΅ Π΄Π° сС Ρ€Π°Π·Π±Π΅Ρ€Π΅, Ρ‡Π΅ ΠΏΠΎΠ»Π΅Π·Π½Π°Ρ‚Π° информация Π½Π΅ сС ΠΏΡ€Π΅Π΄Π°Π²Π° Π² Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ Π²ΠΈΠ΄ (Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Ρ‚ΠΎΠΊΠ΅Π½ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π²Π»ΠΎΠΆΠ΅Π½ΠΈ ΠΈ Ρ‚ΠΎΠ³Π°Π²Π° Π΅ възмоТно Π΄Π° сС ΠΏΡ€Π΅Π΄Π°Π²Π°Ρ‚ Π·Π°ΡˆΠΈΡ„Ρ€Π΅Π½ΠΈ Π΄Π°Π½Π½ΠΈ). Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ, Π² нСя Π½Π΅ трябва Π΄Π° сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π½ΠΈΠΊΠ°ΠΊΠ²Π° сСкрСтна информация. ΠšΠ°ΠΊΡ‚ΠΎ Π·Π°Π³Π»Π°Π²ΠΈΠ΅Ρ‚ΠΎ, Ρ‚Π°ΠΊΠ° ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Π°Ρ‚Π° информация сС ΠΊΠΎΠ΄ΠΈΡ€Π° Π² base64.
Подпис β€” ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π·Π°Π³Π»Π°Π²ΠΈΠ΅ ΠΈ payload, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° изчислим подписа.

Π’Π·Π΅ΠΌΠ°Ρ‚ сС Π·Π°ΠΊΠΎΠ΄ΠΈΡ€Π°Π½ΠΈ Π² base64: Π·Π°Π³Π»Π°Π²ΠΈΠ΅ ΠΈ payload, Ρ‚Π΅ сС обСдиняват Π² Π½ΠΈΠ· ΠΏΡ€Π΅Π· Ρ‚ΠΎΡ‡ΠΊΠ°. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Ρ‚ΠΎΠ·ΠΈ Π½ΠΈΠ· ΠΈ сСкрСтният ΠΊΠ»ΡŽΡ‡ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Ρ‚ ΠΏΡ€Π΅Π· Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΠ° Π·Π° ΡˆΠΈΡ„Ρ€ΠΈΡ€Π°Π½Π΅, посочСн Π² Π·Π°Π³Π»Π°Π²ΠΈΠ΅Ρ‚ΠΎ (ΠΊΠ»ΡŽΡ‡ΡŠΡ‚ β€žalgβ€œ). ΠšΠ»ΡŽΡ‡ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС всякаква Π½ΠΈΠ·. По-Π΄ΡŠΠ»Π³ΠΈΡ‚Π΅ Π½ΠΈΠ·ΠΎΠ²Π΅ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΏΠΎ-ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π½ΠΈ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‰Π΅ ΠΎΡ‚Π½Π΅ΠΌΠ°Ρ‚ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° ΠΏΠΎΠ΄Π±ΠΈΡ€Π°Π½Π΅.

{"alg":"RSA1_5", "payload":"A128CBC-HS256"}

Π˜Π·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Π½Π° устойчив кластСр Keycloak

ΠŸΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π΅Π΄ΠΈΠ½Π΅Π½ кластСр Π·Π° всички ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, изискванията към Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π·Π° SSO нарастват. ΠšΠΎΠ³Π°Ρ‚ΠΎ броят Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ‚Π΅ Π΅ малък, Ρ‚Π΅Π·ΠΈ изисквания Π½Π΅ са Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° осСзаСми Π·Π° всички ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, Π½ΠΎ с ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° броя Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ нарастват изискванията Π·Π° наличност ΠΈ производитСлност.

Π£Π²Π΅Π»ΠΈΡ‡Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° рисковСтС ΠΎΡ‚ ΠΎΡ‚ΠΊΠ°Π· Π½Π° Π΅Π΄ΠΈΠ½Π½ΠΎΡ‚ΠΎ SSO повишава изискванията към Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π·Π° Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈΡ‚Π΅, ΠΊΠ°Ρ‚ΠΎ прСдоставя ΠΌΠ½ΠΎΠ³ΠΎ стриктСн SLA. ΠŸΠΎΡ€Π°Π΄ΠΈ Ρ‚ΠΎΠ²Π°, ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ ΠΈΠ»ΠΈ Π² Ρ€Π°Π½Π½ΠΈΡ‚Π΅ Π΅Ρ‚Π°ΠΏΠΈ Π½Π° внСдряванСто Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ‚Π΅ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΈΠΌΠ°Ρ‚ собствСна нСотказоустойчива инфраструктура. Π‘ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС Π·Π°Π»ΠΎΠΆΠ°Ρ‚ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π·Π° Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ ΠΈ ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅. Най-гъвкаво Π΅ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° отказоустойчив ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Π° виртуализация ΠΈΠ»ΠΈ Ρ…ΠΈΠ±Ρ€ΠΈΠ΄Π΅Π½ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄.

Π—Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅ΠΆΠΈΠΌ Active/Active ΠΈ Active/Passive Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС осигури консистСнтност Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π² Ρ€Π΅Π»Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ β€” ΠΈ Π΄Π²Π΅Ρ‚Π΅ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ трябва Π΄Π° сС Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈΡ€Π°Ρ‚ синхронно ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ гСографски Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Π¦ΠžΠ”.

Най-простият ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° отказоустойчива инсталация.

SSO Π½Π° микросСрвисна Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°. ИзползвамС Keycloak. Част β„–1

Какви прСдимства прСдоставя ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΅Π΄ΠΈΠ½Π΅Π½ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€:

  • Висока наличност ΠΈ производитСлност.
  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ Ρ€Π΅ΠΆΠΈΠΌΠΈ: Active/Active, Active/Passive.
  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅ β€” ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Π° виртуализация.
  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³.
  • Π•Π΄ΠΈΠ½Π΅Π½ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π·Π° идСнтификация/автСнтикация/авторизация Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ‚Π΅.
  • По-ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ взаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π±Π΅Π· участиС Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅.
  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° Π½Π° JWT Ρ‚ΠΎΠΊΠ΅Π½Π° Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ.
  • Π•Π΄ΠΈΠ½Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° Π΄ΠΎΠ²Π΅Ρ€ΠΈΠ΅.
  • По-Π±ΡŠΡ€Π·ΠΎ стартиранС Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° микросСрвизи/ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Π° виртуализация (Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ²Π΄ΠΈΠ³Π°Π½Π΅ ΠΈ настройка Π½Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ).
  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π·Π°ΠΊΡƒΠΏΡƒΠ²Π°Π½Π΅ Π½Π° Ρ‚ΡŠΡ€Π³ΠΎΠ²ΡΠΊΠ° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° ΠΎΡ‚ доставчика.

На ΠΊΠ°ΠΊΠ²ΠΎ трябва Π΄Π° сС ΠΎΠ±ΡŠΡ€Π½Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΏΠ»Π°Π½ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°

Π‘Π£Π‘Π”

Keycloak ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° систСма Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π‘Π£Π‘Π” Π·Π° Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π°: realms, clients, users ΠΈ Π΄Ρ€.
ΠŸΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° сС ΡˆΠΈΡ€ΠΎΠΊ ΡΠΏΠ΅ΠΊΡ‚ΡŠΡ€ ΠΎΡ‚ Π‘Π£Π‘Π”: MS SQL, Oracle, MySQL, PostgreSQL. Keycloak ΠΈΠ΄Π²Π° с Π²Π³Ρ€Π°Π΄Π΅Π½Π° Ρ€Π΅Π»Π°Ρ†ΠΈΠΎΠ½Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ. ΠŸΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ ѝ Π·Π° Π½Π΅Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π΅Π½ΠΈ срСди β€” ΠΊΠ°Ρ‚ΠΎ срСди Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°.

Π—Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Ρ€Π΅ΠΆΠΈΠΌ Active/Active ΠΈ Active/Passive Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС осигури консистСнтност Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π² Ρ€Π΅Π»Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΈ ΠΈ Π΄Π²Π΅Ρ‚Π΅ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Π΄Π° сС Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈΡ€Π°Ρ‚ синхронно ΠΌΠ΅ΠΆΠ΄Ρƒ Π¦ΠžΠ”.

Π Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° кСш ΠΏΠ°ΠΌΠ΅Ρ‚ (Infinspan)

Π—Π° ΠΏΡ€Π°Π²ΠΈΠ»Π½Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ синхронизиранС Π½Π° слСднитС Ρ‚ΠΈΠΏΠΎΠ²Π΅ кСш с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° JBoss Data Grid:

БСсии Π·Π° удостовСряванС β€” ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ сС Π·Π° Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΏΡ€ΠΈ удостовСряванС Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π». Запитванията ΠΎΡ‚ Ρ‚ΠΎΠ·ΠΈ кСш ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ само Π±Ρ€Π°ΡƒΠ·ΡŠΡ€Π° ΠΈ ΡΡŠΡ€Π²ΡŠΡ€Π° Keycloak, Π° Π½Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.

Π’ΠΎΠΊΠ΅Π½ΠΈ Π·Π° дСйствия β€” ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ сС Π·Π° сцСнарии, ΠΏΡ€ΠΈ ΠΊΠΎΠΈΡ‚ΠΎ Π½Π° потрСбитСля Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΏΠΎΡ‚Π²ΡŠΡ€Π΄ΠΈ дСйствиС асинхронно (Ρ‡Ρ€Π΅Π· ΠΈΠΌΠ΅ΠΉΠ»). НапримСр, ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° Π·Π° Π·Π°Π±Ρ€Π°Π²Π΅Π½Π° ΠΏΠ°Ρ€ΠΎΠ»Π° ΠΊΠ΅ΡˆΡŠΡ‚ actionTokens Infinispan сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° прослСдяванС Π½Π° ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈ Π·Π° ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈΡ‚Π΅ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΈ Π½Π° дСйствия, ΠΊΠΎΠΈΡ‚ΠΎ Π²Π΅Ρ‡Π΅ са Π±ΠΈΠ»ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ.

ΠšΠ΅ΡˆΠΈΡ€Π°Π½Π΅ ΠΈ Π½Π΅Π²Π°Π»ΠΈΠ΄ΠΈΡ€Π°Π½Π΅ Π½Π° постоянни Π΄Π°Π½Π½ΠΈ – ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° сС Π·Π° ΠΊΠ΅ΡˆΠΈΡ€Π°Π½Π΅ Π½Π° постоянни Π΄Π°Π½Π½ΠΈ, Π·Π° Π΄Π° сС ΠΈΠ·Π±Π΅Π³Π½Π°Ρ‚ Π½Π΅Π½ΡƒΠΆΠ½ΠΈ запитвания към Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ. ΠšΠΎΠ³Π°Ρ‚ΠΎ някой ΡΡŠΡ€Π²ΡŠΡ€ Keycloak Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π° Π΄Π°Π½Π½ΠΈ, всички останали ΡΡŠΡ€Π²ΡŠΡ€ΠΈ Keycloak Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠ²Π΅ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ трябва Π΄Π° Π½Π°ΡƒΡ‡Π°Ρ‚ Π·Π° Ρ‚ΠΎΠ²Π°.

Π Π°Π±ΠΎΡ‚Π° β€” ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° сС само Π·Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π·Π° Π½Π΅Π²Π°Π»ΠΈΠ΄ΠΈΡ€Π°Π½Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²ΡŠΠ·Π»ΠΈΡ‚Π΅ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° ΠΈ Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠ²Π΅Ρ‚Π΅ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ.

ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡΠΊΠΈ сСсии β€” ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ сС Π·Π° Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π·Π° потрСбитСлскитС сСсии, ΠΊΠΎΠΈΡ‚ΠΎ са Π²Π°Π»ΠΈΠ΄Π½ΠΈ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° сСсията Π½Π° Π±Ρ€Π°ΡƒΠ·ΡŠΡ€Π° Π½Π° потрСбитСля. ΠšΠ΅ΡˆΡŠΡ‚ трябва Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° HTTP запитвания ΠΎΡ‚ крайния ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.

Π—Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ Π³Ρ€ΡƒΠ±Π° сила β€” ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° сС Π·Π° прослСдяванС Π½Π° Π΄Π°Π½Π½ΠΈ Π·Π° Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½ΠΈ Π²Ρ…ΠΎΠ΄ΠΎΠ²Π΅.

Балансировка Π½Π° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ

Π‘Π°Π»Π°Π½ΡΠΈΡ€ΠΎΠ²Ρ‡ΠΈΠΊΡŠΡ‚ Π½Π° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ Π΅ Π΅Π΄ΠΈΠ½Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Keycloak ΠΈ трябва Π΄Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° sticky сСсии.

Π‘ΡŠΡ€Π²ΡŠΡ€ΠΈ Π½Π° прилоТСния

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ сС Π·Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π½Π° взаимодСйствиСто ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈΡ‚Π΅ ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π½Π°Π»ΠΈΡ‡Π½ΠΈ срСдства Π·Π° автоматизация ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅ Π½Π° инфраструктурната автоматизация. Най-чСститС сцСнарии Π·Π° Ρ€Π°Π·Π³ΡŠΡ€Π½Π°Ρ‚Π΅ Π² OpenShift, Kubernetes, Rancher.

Π‘ Ρ‚Π°Π·ΠΈ статия Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°ΠΌΠ΅ ΠΏΡŠΡ€Π²Π°Ρ‚Π° част β€” Ρ‚Π΅ΠΎΡ€Π΅Ρ‚ΠΈΡ‡Π½Π°Ρ‚Π°. Π’ слСдващитС Ρ†ΠΈΠΊΠ»ΠΈ ΠΎΡ‚ статии Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Ρ€Π°Π·Π³Π»Π΅Π΄Π°Π½ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ доставчици Π½Π° удостовСряванС ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° настройки.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster