SSO Π²ΡŠΡ€Ρ…Ρƒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° Π½Π° микроуслугата. ИзползвамС Keycloak. Част 1

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

SSO Π²ΡŠΡ€Ρ…Ρƒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° Π½Π° микроуслугата. ИзползвамС Keycloak. Част 1

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

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

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

SSO Π²ΡŠΡ€Ρ…Ρƒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° Π½Π° микроуслугата. ИзползвамС Keycloak. Част 1

идСнтификация Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π·Π° Ρ€Π°Π·ΠΏΠΎΠ·Π½Π°Π²Π°Π½Π΅ Π½Π° субСкт Ρ‡Ρ€Π΅Π· нСговия ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ (с Π΄Ρ€ΡƒΠ³ΠΈ Π΄ΡƒΠΌΠΈ, Ρ‚ΠΎΠ²Π° Π΅ дСфиницията Π½Π° ΠΈΠΌΠ΅, Π²Ρ…ΠΎΠ΄ ΠΈΠ»ΠΈ Π½ΠΎΠΌΠ΅Ρ€).

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

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

Identity Broker Keycloak

ΠΊΠ»ΡŽΡ‡ΠΎΠ΄ΡŠΡ€ΠΆΠ°Ρ‚Π΅Π» Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° идСнтичност ΠΈ Π΄ΠΎΡΡ‚ΡŠΠΏ с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π² IS, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Π½Π° микросСрвизи.

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

Основна функционалност, ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½Π° ΠΎΡ‚ Keycloak:

  • Π•Π΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ Π²Π»ΠΈΠ·Π°Π½Π΅ ΠΈ Π΅Π΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΈΠ·Π»ΠΈΠ·Π°Π½Π΅ Π·Π° Π±Ρ€Π°ΡƒΠ·ΡŠΡ€Π½ΠΈ прилоТСния.
  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° OpenID/OAuth 2.0/SAML.
  • Identity Brokering - удостовСряванС с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° външни доставчици Π½Π° OpenID Connect ΠΈΠ»ΠΈ SAML идСнтичност.
  • Π‘ΠΎΡ†ΠΈΠ°Π»Π½ΠΎ Π²Π»ΠΈΠ·Π°Π½Π΅ - Google, GitHub, Facebook, Twitter ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° идСнтификация Π½Π° потрСбитСля.
  • User Federation - синхронизиранС Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ ΠΎΡ‚ LDAP ΠΈ Active Directory ΡΡŠΡ€Π²ΡŠΡ€ΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ доставчици Π½Π° идСнтичност.
  • Kerberos мост - ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Kerberos ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ удостовСряванС Π½Π° потрСбитСля.
  • Admin Console - Π·Π° ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° настройкитС ΠΈ ΠΎΠΏΡ†ΠΈΠΈΡ‚Π΅ Π·Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π· ΡƒΠ΅Π±.
  • Конзола Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π°ΠΊΠ°ΡƒΠ½Ρ‚ΠΈ - Π·Π° самостоятСлно ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° потрСбитСлския ΠΏΡ€ΠΎΡ„ΠΈΠ».
  • ΠŸΠ΅Ρ€ΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Π°Ρ‚Π° идСнтичност Π½Π° компанията.
  • 2FA удостовСряванС - ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° 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 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

ΠšΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½ΠΈ доставчици Π½Π° идСнтичност (Π»ΠΎΠΊΠ°Π»Π½ΠΈ)

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

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.

Доставчици Π½Π° идСнтичност - социалСн Π²Ρ…ΠΎΠ΄

Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π²Ρ…ΠΎΠ΄ ΠΎΡ‚ социалнитС ΠΌΡ€Π΅ΠΆΠΈ. Π—Π° Π΄Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° удостовСряванС Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ ΠΊΠΎΠ½Π·ΠΎΠ»Π°Ρ‚Π° Π·Π° администриранС Π½Π° Keycloack. НС са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ΄Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ Ρ‚Π°Π·ΠΈ функционалност Π΅ Π½Π°Π»ΠΈΡ‡Π½Π° Π²Π΅Π΄Π½Π°Π³Π° ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° Π½Π° всСки Π΅Ρ‚Π°ΠΏ ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

SSO Π²ΡŠΡ€Ρ…Ρƒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° Π½Π° микроуслугата. ИзползвамС Keycloak. Част 1

Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ доставчици Π½Π° OpenID/SAML идСнтичност Π·Π° удостовСряванС Π½Π° потрСбитСля.

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

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

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

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

Implicit Flow Π½Π΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΈ Π·Π° опрСсняванС Π½Π° Ρ‚ΠΎΠΊΠ΅Π½ΠΈ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ.

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

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

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

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

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

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

ΠžΠΏΡ€Π΅ΡΠ½ΡΠ²Π°Π½Π΅ Π½Π° Ρ‚ΠΎΠΊΠ΅Π½Π° Π΅ Ρ‚ΠΎΠΊΠ΅Π½, ΠΊΠΎΠΉΡ‚ΠΎ позволява Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅ Π΄Π° поискат Π½ΠΎΠ²ΠΈ Ρ‚ΠΎΠΊΠ΅Π½ΠΈ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ слСд ΠΈΠ·Ρ‚ΠΈΡ‡Π°Π½Π΅ Π½Π° ΠΆΠΈΠ²ΠΎΡ‚Π° ΠΈΠΌ. Π’Π΅Π·ΠΈ Ρ‚ΠΎΠΊΠ΅Π½ΠΈ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ сС ΠΈΠ·Π΄Π°Π²Π°Ρ‚ Π·Π° дълъг ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅.

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

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

JWT Ρ‚ΠΎΠΊΠ΅Π½ - ΡΡŠΡΡ‚Π°Π²

Π—Π°Π³Π»Π°Π²ΠΈΠ΅ - ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π·Π°Π³Π»Π°Π²ΠΊΠ°Ρ‚Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° само Ρ‚ΠΈΠΏΠ° Ρ‚ΠΎΠΊΠ΅Π½ ΠΈ използвания Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ Π·Π° ΠΊΡ€ΠΈΠΏΡ‚ΠΈΡ€Π°Π½Π΅.

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

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

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

{ "Π΅Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Π° ΠΏΠΎΡ‰Π°": "[ΠΈΠΌΠ΅ΠΉΠ» Π·Π°Ρ‰ΠΈΡ‚Π΅Π½]"}

ΠšΠ»ΡŽΡ‡ΠΎΠ²Π΅Ρ‚Π΅ Π² полСзния Ρ‚ΠΎΠ²Π°Ρ€ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ. Има ΠΎΠ±Π°Ρ‡Π΅ няколко Π·Π°ΠΏΠ°Π·Π΅Π½ΠΈ:

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

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

Base64-ΠΊΠΎΠ΄ΠΈΡ€Π°Π½: Π·Π°Π³Π»Π°Π²ΠΈΠ΅Ρ‚ΠΎ ΠΈ полСзният Ρ‚ΠΎΠ²Π°Ρ€ сС Π²Π·Π΅ΠΌΠ°Ρ‚, Ρ‚Π΅ сС ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Ρ‚ Π² Π½ΠΈΠ· Ρ‡Ρ€Π΅Π· Ρ‚ΠΎΡ‡ΠΊΠ°. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Ρ‚ΠΎΠ·ΠΈ Π½ΠΈΠ· ΠΈ сСкрСтният ΠΊΠ»ΡŽΡ‡ сС Π²ΡŠΠ²Π΅ΠΆΠ΄Π°Ρ‚ Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΠ° Π·Π° ΠΊΡ€ΠΈΠΏΡ‚ΠΈΡ€Π°Π½Π΅, посочСн Π² Π·Π°Π³Π»Π°Π²ΠΊΠ°Ρ‚Π° (ΠΊΠ»ΡŽΡ‡ "alg"). ΠšΠ»ΡŽΡ‡ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Π½ΠΈΠ·. По-Π΄ΡŠΠ»Π³ΠΈΡ‚Π΅ струни Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Π½Π°ΠΉ-ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π½ΠΈ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‰Π΅ ΠΎΡ‚Π½Π΅ΠΌΠ΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° Π½Π°Π±ΠΈΡ€Π°Π½Π΅.

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

Π˜Π·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Keycloak Failover Cluster Architecture

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

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

Π—Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠΈΡ‚Π΅ АктивСн/АктивСн ΠΈ АктивСн/ПасивСн ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€, Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС осигури ΡΡŠΠ³Π»Π°ΡΡƒΠ²Π°Π½ΠΎΡΡ‚ Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π² Ρ€Π΅Π»Π°Ρ†ΠΈΠΎΠ½Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ - ΠΈ Π΄Π²Π°Ρ‚Π° възСла Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ синхронно Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈΡ€Π°Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π³Π΅ΠΎ-Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠ²Π΅ Π·Π° Π΄Π°Π½Π½ΠΈ.

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

SSO Π²ΡŠΡ€Ρ…Ρƒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° Π½Π° микроуслугата. ИзползвамС Keycloak. Част 1

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

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

Какво Π΄Π° Ρ‚ΡŠΡ€ΡΠΈΡ‚Π΅, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΠ»Π°Π½ΠΈΡ€Π°Ρ‚Π΅ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€

Π‘Π£Π‘Π”

Keycloak ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° систСма Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, Π·Π° Π΄Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°: сфСри, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ, ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ ΠΈ Π΄Ρ€.
ΠŸΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° сС ΡˆΠΈΡ€ΠΎΠΊ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Π‘Π£Π‘Π”: MS SQL, Oracle, MySQL, PostgreSQL. Keycloak ΠΈΠ΄Π²Π° със собствСна Π²Π³Ρ€Π°Π΄Π΅Π½Π° Ρ€Π΅Π»Π°Ρ†ΠΈΠΎΠ½Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ. ΠŸΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° Π½Π΅Π·Π°Ρ€Π΅Π΄Π΅Π½ΠΈ срСди - ΠΊΠ°Ρ‚ΠΎ срСди Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°.

Π—Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠΈ Π½Π° Π°ΠΊΡ‚ΠΈΠ²Π΅Π½/Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π΅Π½/пасивСн ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€, сС изисква ΡΡŠΠ³Π»Π°ΡΡƒΠ²Π°Π½ΠΎΡΡ‚ Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π² Ρ€Π΅Π»Π°Ρ†ΠΈΠΎΠ½Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΈ Π΄Π²Π°Ρ‚Π° възСла Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ сС Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈΡ€Π°Ρ‚ синхронно ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠ²Π΅Ρ‚Π΅ Π·Π° Π΄Π°Π½Π½ΠΈ.

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

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

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

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

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

Π Π°Π±ΠΎΡ‚Π° - ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° сС само Π·Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° Π½Π΅Π²Π°Π»ΠΈΠ΄Π½ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π½ΠΈ възли ΠΈ Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠ²Π΅ Π·Π° Π΄Π°Π½Π½ΠΈ.

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

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

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

Устройството Π·Π° балансиранС Π½Π° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ Π΅ СдинствСната Π²Ρ…ΠΎΠ΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° към keycloak ΠΈ трябва Π΄Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° Π»Π΅ΠΏΠΊΠ°Π²ΠΈ сСсии.

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

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

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

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€