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

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

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

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