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.
  • Identity Brokering – автСнтикация Ρ‡Ρ€Π΅Π· външни ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΠΈ доставчици OpenID Connect ΠΈΠ»ΠΈ SAML.
  • Social Login – ΠΏΠΎΠ΄ΠΊΡ€Π΅ΠΏΠ° Π·Π° Google, GitHub, Facebook, Twitter Π·Π° идСнтификация Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅.
  • User Federation – синхронизиранС Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ ΠΎΡ‚ LDAP ΠΈ Active Directory ΡΡŠΡ€Π²ΡŠΡ€ΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΠΈ доставчици.
  • Kerberos bridge – ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Kerberos ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½Π° автСнтикация Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅.
  • Admin Console β€” Π·Π° Π΅Π΄ΠΈΠ½Π½ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° настройкитС ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Ρ‡Ρ€Π΅Π· Web.
  • Консола Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π°ΠΊΠ°ΡƒΠ½Ρ‚ – Π·Π° самостоятСлно ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΎΡ„ΠΈΠ»Π° Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅.
  • ΠŸΠ΅Ρ€ΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΡ‚Π° въз основа Π½Π° Ρ„ΠΈΡ€ΠΌΠ΅Π½ стил.
  • Π”Π²ΡƒΡ„Π°ΠΊΡ‚ΠΎΡ€Π½Π° автСнтикация – ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° TOTP/HOTP с Google Authenticator ΠΈΠ»ΠΈ FreeOTP.
  • ΠŸΡ€ΠΎΡ†Π΅ΡΠΈ Π½Π° Π²Ρ…ΠΎΠ΄ – Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° саморСгистрация Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ, Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ ΠΈ Π½ΡƒΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΠ°Ρ€ΠΎΠ»Π°Ρ‚Π° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ.
  • Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° сСсии – администраторитС ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° управляват сСсиитС Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ ΠΎΡ‚ Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ°.
  • Token Mappers – ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ, Ρ€ΠΎΠ»ΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ Π² Ρ‚ΠΎΠΊΠ΅Π½ΠΈΡ‚Π΅.
  • Π“ΡŠΠ²ΠΊΠ°Π²ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈΡ‚Π΅ Ρ‡Ρ€Π΅Π· realm, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ.
  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° CORS – клиСнтскитС Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΈ ΠΈΠΌΠ°Ρ‚ Π²Π³Ρ€Π°Π΄Π΅Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° CORS.
  • Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΠΈ Π·Π° услуги (SPI) – голямо количСство SPI Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ аспСкти Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°: ΠΏΠΎΡ‚ΠΎΡ†ΠΈ Π·Π° автСнтикация, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΠΈ доставчици, ΡΡŠΠΏΠΎΡΡ‚Π°Π²ΡΠ½Π΅ Π½Π° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ.
  • ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΈ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΈ Π·Π° JavaScript прилоТСния, WildFly, JBoss EAP, Fuse, Tomcat, Jetty, Spring.
  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ прилоТСния, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ OpenID Connect Relying Party library ΠΈΠ»ΠΈ SAML 2.0 Service Provider Library.
  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° Ρ€Π°Π·ΡˆΠΈΡ€ΡΠ²Π°Π½Π΅ с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° приставки.

Π—Π° 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 cluster Π·Π° MariaDB 10.1.19.

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

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

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

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

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

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

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

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

Π˜ΠΌΠΏΠ»ΠΈΡ†ΠΈΡ‚Π½ΠΈΡΡ‚ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° Ρ‚ΠΎΠΊΠ΅Π½ΠΈ Π·Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚ΠΎΠΊΠ΅Π½Π° Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ (refresh tokens).

ΠŸΠΎΡ‚ΠΎΠΊ Π½Π° клиСнтски ΠΊΡ€Π΅Π΄ΠΈΡ‚ΠΈ β€” сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ 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 (ВрСмя истСчСния) β€” ΡƒΠΊΠ°Π·Π²Π° сС, ΠΊΠΎΠ³Π° ΠΈΠ·Ρ‚ΠΈΡ‡Π° ΡΡ€ΠΎΠΊΡŠΡ‚ Π½Π° валидност Π½Π° ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π°. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ΡŠΡ‚ JWT изисква всички Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π° ΠΎΡ‚Ρ…Π²ΡŠΡ€Π»ΡΡ‚ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΈ с ΠΈΠ·Ρ‚Π΅ΠΊΡŠΠ» срок. ΠšΠ»ΡŽΡ‡ΡŠΡ‚ Exp трябва Π΄Π° Π΅ Π²Ρ€Π΅ΠΌΠ΅Π²Π° ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π² Unix Ρ„ΠΎΡ€ΠΌΠ°Ρ‚.
  • nbf (НС ΠΏΡ€Π΅Π΄ΠΈ) β€” Ρ‚ΠΎΠ²Π° Π΅ Π²Ρ€Π΅ΠΌΠ΅Π²Π° ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π² Unix Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, която опрСдСля ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ‚ΠΎΠΊΠ΅Π½ΡŠΡ‚ Ρ‰Π΅ бъдС Π²Π°Π»ΠΈΠ΄Π΅Π½.
  • iat (ИздадСно Π²) β€” Ρ‚ΠΎΠ·ΠΈ ΠΊΠ»ΡŽΡ‡ прСдставлява Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΡŠΡ‚ Π΅ ΠΈΠ·Π΄Π°Π΄Π΅Π½ ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° опрСдСлянС Π½Π° Π²ΡŠΠ·Ρ€Π°ΡΡ‚Ρ‚Π° Π½Π° JWT. ΠšΠ»ΡŽΡ‡ΡŠΡ‚ iat трябва Π΄Π° Π΅ Π²Ρ€Π΅ΠΌΠ΅Π²Π° ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π² Unix Ρ„ΠΎΡ€ΠΌΠ°Ρ‚.
  • Jti (JWT ID) β€” Π½ΠΈΠ·, опрСдСлящ ΡƒΠ½ΠΈΠΊΠ°Π»Π΅Π½ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° Ρ‚ΠΎΠ·ΠΈ Ρ‚ΠΎΠΊΠ΅Π½ с ΠΎΠ³Π»Π΅Π΄ Π½Π° Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π°.

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

Π’Π·Π΅ΠΌΠ°Ρ‚ сС ΠΊΠΎΠ΄ΠΈΡ€Π°Π½ΠΈ Π² base64: Π·Π°Π³Π»Π°Π²ΠΈΠ΅Ρ‚ΠΎ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Π°Ρ‚Π° информация, Ρ‚Π΅ сС ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Ρ‚ Π² Π½ΠΈΠ· Ρ‡Ρ€Π΅Π· Ρ‚ΠΎΡ‡ΠΊΠ°. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Ρ‚ΠΎΠ·ΠΈ Π½ΠΈΠ· ΠΈ тайният ΠΊΠ»ΡŽΡ‡ Π²Π»ΠΈΠ·Π°Ρ‚ ΠΊΠ°Ρ‚ΠΎ Π²Ρ…ΠΎΠ΄ Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π·Π° ΠΊΡ€ΠΈΠΏΡ‚ΠΈΡ€Π°Π½Π΅, ΡƒΠΊΠ°Π·Π°Π½ Π² Π·Π°Π³Π»Π°Π²ΠΈΠ΅Ρ‚ΠΎ (ΠΊΠ»ΡŽΡ‡ "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 кластСр Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС осигури консистСнтност Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π² Ρ€Π΅Π»Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΈ Π΄Π²Π°Ρ‚Π° възСла Π½Π° кластСрнитС Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ Π΄Π° сС Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈΡ€Π°Ρ‚ синхронно ΠΌΠ΅ΠΆΠ΄Ρƒ Π¦ΠžΠ”.

Π Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ кСш (Infinispan)

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

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

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

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

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

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

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

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

Π‘Π°Π»Π°Π½ΡΠΈΡ€ΠΎΠ²Π°Ρ‡ΡŠΡ‚ Π½Π° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅ Π΅ Π΅Π΄ΠΈΠ½Π½Π°Ρ‚Π° Π²Ρ…ΠΎΠ΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π² keycloak ΠΈ трябва Π΄Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° sticky sessions.

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

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

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

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

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