ΠΡΠ² Π²ΡΡΠΊΠ° Π³ΠΎΠ»ΡΠΌΠ° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΈ X5 Retail Group, Ρ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° Π±ΠΈΠ·Π½Π΅ΡΠ° Π½Π°ΡΠ°ΡΡΠ²Π° Π±ΡΠΎΡΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ΅, Π² ΠΊΠΎΠΈΡΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅. Π‘ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ ΡΡΠ°Π²Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ Π±Π΅Π·ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅Π½ ΠΏΡΠ΅Ρ ΠΎΠ΄ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ ΠΎΡ Π΅Π΄Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Π΄ΡΡΠ³ΠΎ, ΠΈ ΡΠΎΠ³Π°Π²Π° Π²ΡΠ·Π½ΠΈΠΊΠ²Π° Π½ΡΠΆΠ΄Π°ΡΠ° ΠΎΡ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π΅Π΄ΠΈΠ½Π΅Π½ ΡΡΡΠ²ΡΡ Π·Π° Single-Sign-On (SSO). ΠΠΎ ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΏΡΠ°Π²ΠΈΠΌ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΈΡΠ΅ Π΄ΠΎΡΡΠ°Π²ΡΠΈΡΠΈ ΠΊΠ°ΡΠΎ AD ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈ, ΠΊΠΎΠΈΡΠΎ Π½ΡΠΌΠ°Ρ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ Π°ΡΡΠΈΠ±ΡΡΠΈ, Π²Π΅ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ. ΠΠ° ΠΏΠΎΠΌΠΎΡ ΠΈΠ΄Π²Π° ΠΊΠ»Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠΈ, Π½Π°ΡΠ΅ΡΠ΅Π½ βΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΈ Π±ΡΠΎΠΊΠ΅ΡΠΈβ. ΠΠ°ΠΉ-ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΈΡΠ΅ ΠΎΡ ΡΡΡ ΡΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΠ΅Π»ΠΈ ΠΊΠ°ΡΠΎ Keycloak, Gravitee Access management ΠΈ Π΄ΡΡΠ³ΠΈ. Π§Π΅ΡΡΠΎ ΡΡΠ΅Π½Π°ΡΠΈΡΠ΅ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ: ΠΌΠ°ΡΠΈΠ½Π½ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅, ΡΡΠ°ΡΡΠΈΠ΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΠΈ Π΄Ρ. Π Π΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° Π³ΡΠ²ΠΊΠ°Π²Π° ΠΈ ΠΌΠ°ΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ, ΡΠΏΠΎΡΠΎΠ±Π½Π° Π΄Π° ΠΎΠ±Π΅Π΄ΠΈΠ½ΠΈ Π²ΡΠΈΡΠΊΠΈ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ Π² Π΅Π΄Π½ΠΎ, ΠΈ ΡΠ°ΠΊΠΎΠ²Π° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π² Π½Π°ΡΠ°ΡΠ° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΈΡΡ Π±ΡΠΎΠΊΠ΅Ρ β Keycloak.

Keycloak Π΅ ΠΏΡΠΎΠ΄ΡΠΊΡ Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π·Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ» Π½Π° Π΄ΠΎΡΡΡΠΏΠ° ΠΈ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΠΎΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ° RedHat. Π’ΠΎΠΉ Π΅ ΠΎΡΠ½ΠΎΠ²Π°ΡΠ° Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠΈ SSO β RH-SSO.
ΠΡΠ½ΠΎΠ²Π½ΠΈ ΠΏΠΎΠ½ΡΡΠΈΡ
ΠΡΠ΅Π΄ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ Π΄Π° ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡΡΠ° ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡΠ΅, ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈ Π² ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠ΅ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅:

ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ β ΡΠΎΠ²Π° Π΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° Π·Π° ΡΠ°Π·ΠΏΠΎΠ·Π½Π°Π²Π°Π½Π΅ Π½Π° ΡΡΠ±Π΅ΠΊΡΠ° ΠΏΠΎ Π½Π΅Π³ΠΎΠ²ΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ (ΠΏΠΎ-ΠΏΡΠΎΡΡΠΎ ΠΊΠ°Π·Π°Π½ΠΎ, ΡΠΎΠ²Π° Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° ΠΈΠΌΠ΅ΡΠΎ, Π»ΠΎΠ³ΠΈΠ½Π° ΠΈΠ»ΠΈ Π½ΠΎΠΌΠ΅ΡΠ°).
ΠΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ β ΡΠΎΠ²Π° Π΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π°Π²ΡΠ΅Π½ΡΠΈΡΠ½ΠΎΡΡΡΠ° (ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° Ρ ΠΏΠ°ΡΠΎΠ»Π°, ΠΏΠΈΡΠΌΠΎ ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° ΠΏΠΎ Π΅Π»Π΅ΠΊΡΡΠΎΠ½Π΅Π½ ΠΏΠΎΠ΄ΠΏΠΈΡ ΠΈ Ρ.Π½.)
ΠΠ²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ β ΡΠΎΠ²Π° Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠ½Π΅ Π½Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π½ΡΠΊΠ°ΠΊΡΠ² ΡΠ΅ΡΡΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄ΠΎ Π΅Π»Π΅ΠΊΡΡΠΎΠ½Π½Π° ΠΏΠΎΡΠ°).
ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΈΡΡ Π±ΡΠΎΠΊΠ΅Ρ 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
JAVA API
ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΈ Π΄ΠΎΡΡΠ°Π²ΡΠΈΡΠΈ Π½Π° Π½ΠΈΠ²ΠΎ ΠΏΡΠ΅Π΄ΠΏΡΠΈΡΡΠΈΠ΅ (On-Premise)
ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° Π°Π²ΡΠ΅Π½ΡΠΈΠΊΠ°ΡΠΈΡ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΠΏΡΠ΅Π· ΡΡΠ»ΡΠ³ΠΈ Π·Π° ΡΠ΅Π΄Π΅ΡΠ°ΡΠΈΡ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ.

ΠΡΠ·ΠΌΠΎΠΆΠ½Π° Π΅ ΠΈ Π±Π΅Π·ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½Π° Π°Π²ΡΠ΅Π½ΡΠΈΠΊΠ°ΡΠΈΡ β Π°ΠΊΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ ΡΠ΅ Π°Π²ΡΠ΅Π½ΡΠΈΠΊΠΈΡΠ°Ρ Π½Π° ΡΠ°Π±ΠΎΡΠ½ΠΈ ΡΡΠ°Π½ΡΠΈΠΈ Ρ Kerberos (LDAP ΠΈΠ»ΠΈ AD), ΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π΄Π° Π±ΡΠ΄Π°Ρ Π°Π²ΡΠ΅Π½ΡΠΈΠΊΠΈΡΠ°Π½ΠΈ Π² Keycloak Π±Π΅Π· Π΄Π° Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠ½ΠΎΠ²ΠΎ Π΄Π° Π²ΡΠ²Π΅ΠΆΠ΄Π°Ρ ΠΈΠΌΠ΅ΡΠΎ ΠΈ ΠΏΠ°ΡΠΎΠ»Π°ΡΠ° ΡΠΈ.
ΠΠ° Π°Π²ΡΠ΅Π½ΡΠΈΠΊΠ°ΡΠΈΡ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π²Π°ΡΠ° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ΅Π»Π°ΡΠΈΠΎΠ½Π½Π° Π‘Π£ΠΠ, ΠΊΠΎΠ΅ΡΠΎ Π΅ Π½Π°ΠΉ-ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΎ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π½Π΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° Π΄ΡΠ»Π³ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Π² ΡΠ°Π½Π½ΠΈΡΠ΅ Π΅ΡΠ°ΠΏΠΈ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ΅. ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, Keycloak ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π²Π³ΡΠ°Π΄Π΅Π½Π° Π‘Π£ΠΠ Π·Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΈ Π΄Π°Π½Π½ΠΈ Π·Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅.
Π‘ΠΏΠΈΡΡΠΊΡΡ Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½ΠΈΡΠ΅ Π‘Π£ΠΠ Π΅ ΠΎΠ±ΡΠΈΡΠ΅Π½ ΠΈ Π²ΠΊΠ»ΡΡΠ²Π°: MS SQL, Oracle, PostgreSQL, MariaDB, Oracle ΠΈ Π΄Ρ. ΠΠ°ΠΉ-Π΄ΠΎΠ±ΡΠ΅ ΡΠ΅ΡΡΠ²Π°Π½ΠΈΡΠ΅ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΡΠ° Oracle 12C Release1 RAC ΠΈ Galera 3.12 cluster Π·Π° MariaDB 10.1.19.
ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΈ Π΄ΠΎΡΡΠ°Π²ΡΠΈΡΠΈ β ΡΠΎΡΠΈΠ°Π»Π½ΠΎ Π»ΠΎΠ³Π²Π°Π½Π΅
ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΈΠ½ ΠΎΡ ΡΠΎΡΠΈΠ°Π»Π½ΠΈ ΠΌΡΠ΅ΠΆΠΈ. ΠΠ° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° Π·Π° Π°Π²ΡΠ΅Π½ΡΠΈΠΊΠ°ΡΠΈΡ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠΎΠ½ΡΠΎΠ»Π°ΡΠ° Π½Π° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° Π½Π° Keycloak. ΠΡΠΌΠ° Π½ΡΠΆΠ΄Π° ΠΎΡ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ΄Π° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ° ΠΈ ΡΠ°Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ Π΅ Π½Π°Π»ΠΈΡΠ½Π° "ΠΎΡ ΠΊΡΡΠΈΡΡΠ°" ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π° Π½Π° Π²ΡΡΠΊΠ° ΡΡΠ°Π΄ΠΈΡ ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°.

ΠΠ° Π°Π²ΡΠ΅Π½ΡΠΈΠΊΠ°ΡΠΈΡ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ OpenID/SAML ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΈ Π΄ΠΎΡΡΠ°Π²ΡΠΈΡΠΈ.
Π’ΠΈΠΏΠΈΡΠ½ΠΈ ΡΡΠ΅Π½Π°ΡΠΈΠΈ Π·Π° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ Ρ OAuth2 Π² Keycloak
ΠΡΠΎΡΠ΅Ρ Π½Π° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΎΠ½Π΅Π½ ΠΊΠΎΠ΄ β ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΡΡ ΡΡΡΠ²ΡΡΠ½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (server-side applications). ΠΠ΄ΠΈΠ½ ΠΎΡ Π½Π°ΠΉ-ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡΠ΅ ΡΠΈΠΏΠΎΠ²Π΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ Π·Π° ΡΡΡΠ²ΡΡΠ½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΏΡΠΈ ΠΊΠΎΠΈΡΠΎ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡΡ ΠΊΠΎΠ΄ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ Π΄Π°Π½Π½ΠΈΡΠ΅ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π½Π΅ ΡΠ° Π΄ΠΎΡΡΡΠΏΠ½ΠΈ Π·Π° ΡΡΠ΅ΡΠΈ Π»ΠΈΡΠ°. ΠΡΠΎΡΠ΅ΡΡΡ Π² ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π°Π²Π° Π½Π° ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π°Π½Π΅ (redirection). ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²uje Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈ Π°Π³Π΅Π½Ρ (user-agent), ΠΊΠ°ΡΠΎ ΡΠ΅Π± Π±ΡΠ°ΡΠ·ΡΡ β Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ΠΎΠ²Π΅ Π·Π° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ Π½Π° API, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π°Ρ ΠΏΡΠ΅Π· ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΡ Π°Π³Π΅Π½Ρ.
ΠΠΌΠΏΠ»ΠΈΡΠΈΡΠ΅Π½ ΠΏΠΎΡΠΎΠΊ β ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ΅ ΠΎΡ ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈ ΠΈΠ»ΠΈ ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ).
ΠΠΌΠΏΠ»ΠΈΡΠΈΡΠ½ΠΈΡΡ ΡΠΈΠΏ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡ ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈ ΠΈ ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΡΠ΄Π΅ΡΠΎ ΠΊΠΎΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈΠ°Π»Π½ΠΎΡΡΡΠ° Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΠ°Π½Π°. ΠΠΌΠΏΠ»ΠΈΡΠΈΡΠ½ΠΈΡΡ ΡΠΈΠΏ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΡ Π°Π³Π΅Π½Ρ, ΠΊΠ°ΡΠΎ ΡΠΎΠΊΠ΅Π½ΡΡ Π·Π° Π΄ΠΎΡΡΡΠΏ ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π° Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΡ Π°Π³Π΅Π½Ρ Π·Π° ΠΏΠΎ-Π½Π°ΡΠ°ΡΡΡΠ½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ. Π’ΠΎΠ²Π° ΠΏΡΠ°Π²ΠΈ ΡΠΎΠΊΠ΅Π½Π° Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π·Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ ΠΈ Π·Π° Π΄ΡΡΠ³ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ. ΠΡΠΈ ΡΠΎΠ·ΠΈ ΡΠΈΠΏ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ Π½Π΅ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Π°Π²ΡΠ΅Π½ΡΠΈΠΊΠ°ΡΠΈΡ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, Π° ΡΠ°ΠΌΠΈΡΡ ΠΏΡΠΎΡΠ΅Ρ ΡΠ°Π·ΡΠΈΡΠ° Π½Π° URL Π°Π΄ΡΠ΅ΡΠ° Π·Π° ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π°Π½Π΅ (ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°Π½ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π² ΡΡΠ»ΡΠ³Π°ΡΠ°).
ΠΠΌΠΏΠ»ΠΈΡΠΈΡΠ½ΠΈΡΡ ΠΏΠΎΡΠΎΠΊ Π½Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΠΎΠΊΠ΅Π½ΠΈ Π·Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΎΠΊΠ΅Π½Π° Π·Π° Π΄ΠΎΡΡΡΠΏ (refresh tokens).
ΠΠΎΡΠΎΠΊ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈ ΠΊΡΠ΅Π΄ΠΈΡΠΈ β ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ API. Π’ΠΎΠ·ΠΈ ΡΠΈΠΏ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ βΡΡΡΠ²ΡΡ-ΡΡΡΠ²ΡΡβ, ΠΊΠΎΠΈΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Ρ Π½Π° Π·Π°Π΄Π΅Π½ ΠΏΠ»Π°Π½ Π±Π΅Π· Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ. ΠΠΎΡΠΎΠΊΡΡ Π½Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠ½Π΅ Π½Π° ΠΊΡΠ΅Π΄ΠΈΡΠΈ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π½Π° ΡΠ΅Π± ΡΡΠ»ΡΠ³Π°ΡΠ° (ΠΊΠΎΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈΠ°Π»Π΅Π½ ΠΊΠ»ΠΈΠ΅Π½Ρ) Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΡΠ΅ ΡΠΈ ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΠΈΡΠ΅Π»Π½ΠΈ Π΄Π°Π½Π½ΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ ΠΏΡΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° Π΄ΡΡΠ³Π° ΡΠ΅Π± ΡΡΠ»ΡΠ³Π°. ΠΠ° ΠΏΠΎ-Π²ΠΈΡΠΎΠΊΠ° ΡΡΠ΅ΠΏΠ΅Π½ Π½Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°ΡΠ°ΡΠ° ΡΡΠ»ΡΠ³Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ (Π²ΠΌΠ΅ΡΡΠΎ ΠΎΠ±ΡΠ° ΡΠ°ΠΉΠ½Π°) ΠΊΠ°ΡΠΎ ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΠΈΡΠ΅Π»Π½ΠΈ Π΄Π°Π½Π½ΠΈ.
Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΡΠ° Π½Π° OAuth2 Π΅ ΠΎΠΏΠΈΡΠ°Π½Π° Π²
JWT ΡΠΎΠΊΠ΅Π½ ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²Π°
JWT (JSON Web Token) β ΠΎΡΠΊΡΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡ (), ΠΊΠΎΠΉΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ΅Π½ ΠΈ Π°Π²ΡΠΎΠ½ΠΎΠΌΠ΅Π½ Π½Π°ΡΠΈΠ½ Π·Π° ΡΠΈΠ³ΡΡΠ½Π° ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΌΠ΅ΠΆΠ΄ΡΡΡΡΠ°Π½ΠΈ ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° 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 ΠΊΠ»ΡΡΡΠ΅Ρ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΠΎΡΠΈΠ³ΡΡΠΈ ΠΊΠΎΠ½ΡΠΈΡΡΠ΅Π½ΡΠ½ΠΎΡΡ Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅ Π² ΡΠ΅Π»Π°ΡΠΈΠΎΠ½Π½Π°ΡΠ° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ β ΠΈ Π΄Π²Π΅ΡΠ΅ Π±Π°Π·ΠΎΠ²ΠΈ ΡΠ·Π»ΠΈ ΡΡΡΠ±Π²Π° ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ Π΄Π° ΡΠ΅ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈΡΠ°Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π³Π΅ΠΎΠ³ΡΠ°ΡΡΠΊΠΈ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ Π¦ΠΠ.
ΠΠ°ΠΉ-ΠΏΡΠΎΡΡΠΈΡΡ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡ.

ΠΠ°ΠΊΠ²ΠΈ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²Π° Π΄Π°Π²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π΅Π΄ΠΈΠ½Π΅Π½ ΠΊΠ»ΡΡΡΠ΅Ρ:
- ΠΠΈΡΠΎΠΊΠ° Π½Π°Π»ΠΈΡΠ½ΠΎΡΡ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ.
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΠ΅ΠΆΠΈΠΌΠΈΡΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°: 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
