λͺ¨λ λκΈ°μ μμ X5 Retail Groupλ μμΈλ μλλλ€. κ°λ°ν¨μ λ°λΌ μ¬μ©μ μΈμ¦μ΄ νμν νλ‘μ νΈμ μκ° μ¦κ°ν©λλ€. μκ°μ΄ μ§λ¨μ λ°λΌ ν μμ© νλ‘κ·Έλ¨μμ λ€λ₯Έ μμ© νλ‘κ·Έλ¨μΌλ‘ μ¬μ©μλ₯Ό μννκ² μ νν΄μΌ νλ©° λ¨μΌ SSO(Single-Sing-On) μλ²λ₯Ό μ¬μ©ν΄μΌ ν©λλ€. κ·Έλ¬λ ADμ κ°μ ID μ 곡μ λλ μΆκ° μμ±μ΄ μλ κΈ°νκ° μ΄λ―Έ λ€μν νλ‘μ νΈμμ μ¬μ©λκ³ μλ κ²½μ°μλ μ΄λ»μ΅λκΉ? "μλ³ λΈλ‘컀"λΌκ³ νλ μμ€ν ν΄λμ€κ° λμμ΄ λ κ²μ λλ€. κ°μ₯ κΈ°λ₯μ μΈ κ²μ Keycloak, Gravitee μ‘μΈμ€ κ΄λ¦¬ λ±κ³Ό κ°μ λνμ λλ€. λλΆλΆμ κ²½μ° μ¬μ© μ¬λ‘λ κΈ°κ³ μνΈ μμ©, μ¬μ©μ μ°Έμ¬ λ± λ€λ₯Ό μ μμ΅λλ€. μ루μ μ λͺ¨λ μꡬ μ¬νμ νλλ‘ κ²°ν©ν μ μλ μ μ°νκ³ νμ₯ κ°λ₯ν κΈ°λ₯μ μ§μν΄μΌ ν©λλ€. μ΄λ¬ν μ루μ μ μ°λ¦¬ νμ¬λ μ΄μ νμ λΈλ‘μ»€μΈ Keycloakμ 보μ νκ³ μμ΅λλ€.

Keycloakμ RedHatμμ κ΄λ¦¬νλ μ€ν μμ€ ID λ° μ‘μΈμ€ μ μ΄ μ νμ
λλ€. SSO - RH-SSOλ₯Ό μ¬μ©νλ νμ¬ μ νμ κΈ°μ΄μ
λλ€.
κΈ°λ³Έ κ°λ
μ루μ κ³Ό μ κ·Ό λ°©μμ λ€λ£¨κΈ° μ μ νλ‘μΈμ€μ μ©μ΄μ μμλ₯Ό κ²°μ ν΄μΌ ν©λλ€.

μ λΆμ¦ μλ³μλ‘ μ£Όμ λ₯Ό μΈμνλ μ μ°¨μ
λλ€(μ¦, μ΄κ²μ μ΄λ¦, λ‘κ·ΈμΈ λλ λ²νΈμ μ μμ
λλ€).
μΈμ¦ - μΈμ¦ μ μ°¨μ λλ€. (λΉλ°λ²νΈλ‘ μ΄μ©μ νμΈ, μ μμλͺ μΌλ‘ λ¬Έμ νμΈ λ±)
κΆν λΆμ¬ - 리μμ€μ λν μ‘μΈμ€ μ 곡(μ: μ΄λ©μΌ)μ λλ€.
μ μ μ€κ°μΈ ν€ν΄λ‘
μ΄μ λ§ν λ§μ΄ν¬λ‘ μλΉμ€ μν€ν μ² ν¨ν΄μ μ¬μ©ν μ μλ ISμμ μ¬μ©νλλ‘ μ€κ³λ μ€ν μμ€ ID λ° μ‘μΈμ€ κ΄λ¦¬ μ루μ μ λλ€.
Keycloakμ SSO(Single Sign-On), μ€κ° ID λ° μμ λ‘κ·ΈμΈ, μ¬μ©μ μ°ν©, ν΄λΌμ΄μΈνΈ μ΄λν°, κ΄λ¦¬ μ½μ λ° κ³μ κ΄λ¦¬ μ½μκ³Ό κ°μ κΈ°λ₯μ μ 곡ν©λλ€.
Keycloakμμ μ§μνλ κΈ°λ³Έ κΈ°λ₯:
- λΈλΌμ°μ μ ν리μΌμ΄μ μ μν λ¨μΌ μ¬μΈμ¨ λ° λ¨μΌ μ¬μΈμμ.
- OpenID/OAuth 2.0/SAML μ§μ.
- ID λΈλ‘μ»€λ§ - μΈλΆ OpenID Connect λλ SAML ID μ 곡μλ₯Ό μ¬μ©ν μΈμ¦.
- μμ λ‘κ·ΈμΈ - μ¬μ©μ μλ³μ μν Google, GitHub, Facebook, Twitter μ§μ.
- μ¬μ©μ μ°ν© - LDAP λ° Active Directory μλ²μ κΈ°ν ID 곡κΈμμ μ¬μ©μ λκΈ°ν.
- Kerberos λΈλ¦¬μ§ - μλ μ¬μ©μ μΈμ¦μ μν΄ Kerberos μλ²λ₯Ό μ¬μ©ν©λλ€.
- Admin Console - μΉμ ν΅ν μ€μ λ° μ루μ μ΅μ μ ν΅ν© κ΄λ¦¬μ©.
- κ³μ κ΄λ¦¬ μ½μ - μ¬μ©μ νλ‘νμ μ체μ μΌλ‘ κ΄λ¦¬ν©λλ€.
- κΈ°μ μ μ½νΌλ μ΄νΈ μμ΄λ΄ν°ν° κΈ°λ° μ루μ 컀μ€ν°λ§μ΄μ§
- 2FA μΈμ¦ - Google Authenticator λλ FreeOTPλ₯Ό μ¬μ©ν TOTP/HOTP μ§μ.
- λ‘κ·ΈμΈ νλ¦ - μ¬μ©μ μκ° λ±λ‘, μνΈ λ³΅κ΅¬ λ° μ¬μ€μ λ±μ΄ κ°λ₯ν©λλ€.
- μΈμ κ΄λ¦¬ - κ΄λ¦¬μλ λ¨μΌ μ§μ μμ μ¬μ©μ μΈμ μ κ΄λ¦¬ν μ μμ΅λλ€.
- ν ν° λ§€νΌ - μ¬μ©μ μμ±, μν λ° κΈ°ν νμ μμ±μ ν ν°μ λ°μΈλ©ν©λλ€.
- μμ, μ ν리μΌμ΄μ λ° μ¬μ©μ μ λ°μ κ±ΈμΉ μ μ°ν μ μ± κ΄λ¦¬.
- CORS μ§μ - ν΄λΌμ΄μΈνΈ μ΄λν°μλ CORS μ§μ κΈ°λ₯μ΄ λ΄μ₯λμ΄ μμ΅λλ€.
- SPI(Service Provider Interfaces) - μΈμ¦ νλ¦, ID 곡κΈμ, νλ‘ν μ½ λ§€ν λ± μλ²μ λ€μν μΈ‘λ©΄μ μ¬μ©μ μ§μ ν μ μλ λ§μ μμ SPIμ λλ€.
- JavaScript μ ν리μΌμ΄μ μ© ν΄λΌμ΄μΈνΈ μ΄λν°, WildFly, JBoss EAP, Fuse, Tomcat, Jetty, Spring.
- OpenID Connect Relying Party λΌμ΄λΈλ¬λ¦¬ λλ SAML 2.0 μλΉμ€ 곡κΈμ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ§μνλ λ€μν μ ν리μΌμ΄μ μμ μ μ§μν©λλ€.
- νλ¬κ·ΈμΈμ μ¬μ©νμ¬ νμ₯ κ°λ₯.
CI / CD νλ‘μΈμ€ λ° Keycloakμ κ΄λ¦¬ νλ‘μΈμ€ μλνλ₯Ό μν΄ REST API / JAVA APIλ₯Ό μ¬μ©ν μ μμ΅λλ€. λ¬Έμλ μ μμ μΌλ‘ μ¬μ©ν μ μμ΅λλ€.
REST API
μλ° API
μν°νλΌμ΄μ¦ ID 곡κΈμ(μ¨νλ λ―Έμ€)
μ¬μ©μ μ°ν© μλΉμ€λ₯Ό ν΅ν΄ μ¬μ©μλ₯Ό μΈμ¦νλ κΈ°λ₯.

ν΅κ³Ό μΈμ¦λ μ¬μ©ν μ μμ΅λλ€. μ¬μ©μκ° Kerberos(LDAP λλ AD)κ° μλ μν¬μ€ν
μ΄μ
μμ μΈμ¦νλ κ²½μ° μ¬μ©μ μ΄λ¦κ³Ό μνΈλ₯Ό λ€μ μ
λ ₯νμ§ μκ³ λ μλμΌλ‘ Keycloakμ μΈμ¦λ μ μμ΅λλ€.
μ¬μ©μμ μΈμ¦ λ° μΆκ° κΆν λΆμ¬λ₯Ό μν΄ νλ‘μ νΈ μ΄κΈ° λ¨κ³μμ κΈ΄ μ€μ λ° ν΅ν©μ΄ νμνμ§ μκΈ° λλ¬Έμ κ°λ° νκ²½μ κ°μ₯ μ ν©ν κ΄κ³ν DBMSλ₯Ό μ¬μ©ν μ μμ΅λλ€. κΈ°λ³Έμ μΌλ‘ Keycloakμ λ΄μ₯ DBMSλ₯Ό μ¬μ©νμ¬ μ€μ λ° μ¬μ©μ λ°μ΄ν°λ₯Ό μ μ₯ν©λλ€.
μ§μλλ DBMS λͺ©λ‘μ κ΄λ²μνλ©° MS SQL, Oracle, PostgreSQL, MariaDB, Oracle λ±μ ν¬ν¨ν©λλ€. μ§κΈκΉμ§ κ°μ₯ λ§μ΄ ν μ€νΈλ κ²μ Oracle 12C Release1 RACμ MariaDB 3.12μ© Galera 10.1.19 ν΄λ¬μ€ν°μ λλ€.
ID 곡κΈμ - μμ λ‘κ·ΈμΈ
μμ λ€νΈμν¬μμ λ‘κ·ΈμΈμ μ¬μ©ν μ μμ΅λλ€. μ¬μ©μ μΈμ¦ κΈ°λ₯μ νμ±ννλ €λ©΄ Keycloack κ΄λ¦¬ μ½μμ μ¬μ©νμμμ€. μ ν리μΌμ΄μ μ½λλ₯Ό λ³κ²½ν νμκ° μμΌλ©° μ΄ κΈ°λ₯μ μ¦μ μ¬μ©ν μ μμΌλ©° νλ‘μ νΈμ λͺ¨λ λ¨κ³μμ νμ±νν μ μμ΅λλ€.

μ¬μ©μ μΈμ¦μ μν΄ OpenID/SAML ID 곡κΈμλ₯Ό μ¬μ©ν μ μμ΅λλ€.
Keycloakμμ OAuth2λ₯Ό μ¬μ©νλ μΌλ°μ μΈ μΈμ¦ μλ리μ€
μΈμ¦ μ½λ νλ¦ - μλ² μΈ‘ μμ© νλ‘κ·Έλ¨κ³Ό ν¨κ» μ¬μ©λ©λλ€. μΈλΆμΈμ΄ μ ν리μΌμ΄μ μ μμ€ μ½λμ ν΄λΌμ΄μΈνΈ λ°μ΄ν°λ₯Ό μ¬μ©ν μ μλ μλ² μ ν리μΌμ΄μ μ μ ν©νκΈ° λλ¬Έμ κ°μ₯ μΌλ°μ μΈ μΈμ¦ κΆν μ ν μ€ νλμ λλ€. μ΄ κ²½μ° νλ‘μΈμ€λ 리λλ μ μ κΈ°λ°μΌλ‘ ν©λλ€. μ ν리μΌμ΄μ μ μΉ λΈλΌμ°μ μ κ°μ μ¬μ©μ μμ΄μ νΈ(μ¬μ©μ μμ΄μ νΈ)μ ν΅μ ν μ μμ΄μΌ μ¬μ©μ μμ΄μ νΈλ₯Ό ν΅ν΄ 리λλ μ λλ API μΈμ¦ μ½λλ₯Ό λ°μ μ μμ΅λλ€.
μμμ νλ¦ - λͺ¨λ°μΌ λλ μΉ μ ν리μΌμ΄μ (μ¬μ©μ μ₯μΉμμ μ€νλλ μ ν리μΌμ΄μ )μμ μ¬μ©λ©λλ€.
μμμ μΈμ¦ κΆν μ νμ ν΄λΌμ΄μΈνΈ κΈ°λ°μ±μ 보μ₯ν μ μλ λͺ¨λ°μΌ λ° μΉ μ ν리μΌμ΄μ μμ μ¬μ©λ©λλ€. μμμ κΆν μ νμ λν μ¬μ©μ μμ΄μ νΈ λ¦¬λλ μ μ μ¬μ©νλ―λ‘ μ ν리μΌμ΄μ μμ μΆκ°λ‘ μ¬μ©ν μ μλλ‘ μ‘μΈμ€ ν ν°μ΄ μ¬μ©μ μμ΄μ νΈμ μ λ¬λ©λλ€. μ΄λ κ² νλ©΄ μ¬μ©μμ μ¬μ©μ μ₯μΉμ λ€λ₯Έ μμ© νλ‘κ·Έλ¨μμ ν ν°μ μ¬μ©ν μ μμ΅λλ€. μ΄ μ νμ μΉμΈ κΆνμ μ ν리μΌμ΄μ μ IDλ₯Ό μΈμ¦νμ§ μμΌλ©° νλ‘μΈμ€ μ체λ 리λλ μ URL(μ΄μ μ μλΉμ€μ λ±λ‘λ¨)μ μμ‘΄ν©λλ€.
μμμ νλ¦μ μ‘μΈμ€ ν ν° μλ‘ κ³ μΉ¨ ν ν°μ μ§μνμ§ μμ΅λλ€.
ν΄λΌμ΄μΈνΈ μ격 μ¦λͺ
λΆμ¬ νλ¦ β μ ν리μΌμ΄μ
μ΄ APIμ μ‘μΈμ€ν λ μ¬μ©λ©λλ€. μ΄ μ νμ κΆν λΆμ¬ κΆνμ μΌλ°μ μΌλ‘ μ¦κ°μ μΈ μ¬μ©μ μνΈ μμ© μμ΄ λ°±κ·ΈλΌμ΄λμμ μνλμ΄μΌ νλ μλ² κ° μνΈ μμ©μ μ¬μ©λ©λλ€. ν΄λΌμ΄μΈνΈ μ격 μ¦λͺ
λΆμ¬ νλ¦μ ν΅ν΄ μΉ μλΉμ€(κΈ°λ° ν΄λΌμ΄μΈνΈ)λ λ€λ₯Έ μΉ μλΉμ€λ₯Ό νΈμΆν λ μΈμ¦μ μν΄ μ¬μ©μλ₯Ό κ°μ₯νλ λμ μ체 μ격 μ¦λͺ
μ μ¬μ©ν μ μμ΅λλ€. λ λμ μμ€μ 보μμ μν΄ νΈμΆ μλΉμ€κ° μΈμ¦μ(곡μ λΉλ° λμ )λ₯Ό μ격 μ¦λͺ
μΌλ‘ μ¬μ©ν μ μμ΅λλ€.
OAuth2 μ¬μμ λ€μμ μ€λͺ
λμ΄ μμ΅λλ€.
JWT ν ν°κ³Ό κ·Έ μ΄μ
JWT(JSON μΉ ν ν°)λ κ°λ°©ν νμ€() JSON κ°μ²΄λ‘ λΉμ¬μ κ°μ μ 보λ₯Ό μμ νκ² μ μ‘νλ κ°κ²°νκ³ λ 립μ μΈ λ°©λ²μ μ μν©λλ€.
νμ€μ λ°λ₯΄λ©΄ ν ν°μ μ μΌλ‘ ꡬλΆλ base-64 νμμ μΈ λΆλΆμΌλ‘ ꡬμ±λ©λλ€. 첫 λ²μ§Έ λΆλΆμ ν€λλΌκ³ νλ©° μ¬κΈ°μλ ν ν° μ νκ³Ό λμ§νΈ μλͺ μ μ»κΈ° μν ν΄μ μκ³ λ¦¬μ¦μ μ΄λ¦μ΄ ν¬ν¨λ©λλ€. λ λ²μ§Έ λΆλΆμ κΈ°λ³Έ μ 보(μ¬μ©μ, μμ± λ±)λ₯Ό μ μ₯ν©λλ€. μΈ λ²μ§Έ λΆλΆμ λμ§νΈ μλͺ μ λλ€.
. .
DBμ ν ν°μ μ μ₯νμ§ λ§μμμ€. μ ν¨ν ν ν°μ μνΈμ λμΌνλ―λ‘ ν ν°μ μ μ₯νλ κ²μ μΌλ° ν
μ€νΈλ‘ μνΈλ₯Ό μ μ₯νλ κ²κ³Ό κ°μ΅λλ€.
μ‘μΈμ€ ν ν° λ³΄μ μλ² λ¦¬μμ€μ λν μμ μ μ‘μΈμ€ κΆνμ λΆμ¬νλ ν ν°μ
λλ€. μΌλ°μ μΌλ‘ μλͺ
μ΄ μ§§κ³ ν ν°μ μμ²νλ λΉμ¬μμ IP μ£Όμμ κ°μ μΆκ° μ 보λ₯Ό μ λ¬ν μ μμ΅λλ€.
μλ‘ κ³ μΉ¨ ν ν° ν΄λΌμ΄μΈνΈκ° μλͺ μ΄ λ§λ£λ ν μ μ‘μΈμ€ ν ν°μ μμ²ν μ μλλ‘ νλ ν ν°μ λλ€. μ΄λ¬ν ν ν°μ μΌλ°μ μΌλ‘ μ₯κΈ°κ° λ°νλ©λλ€.
λ§μ΄ν¬λ‘ μλΉμ€ μν€ν μ²μμ μ¬μ©ν λμ μ£Όμ μ΄μ :
- XNUMXν μΈμ¦μ ν΅ν΄ λ€μν μ ν리μΌμ΄μ λ° μλΉμ€μ μ κ·Όν μ μλ κΈ°λ₯.
- μ¬μ©μ νλ‘νμ νμ μμ±μ΄ λ§μ§ μμ κ²½μ° νμ΄λ‘λμ μΆκ°ν μ μλ λ°μ΄ν°(μλ λ° μ¦μ ν¬ν¨)λ‘ λ³΄κ°ν μ μμ΅λλ€.
- νμ± μΈμ μ λν μ 보λ₯Ό μ μ₯ν νμκ° μμΌλ©° μλ² μμ© νλ‘κ·Έλ¨μ μλͺ λ§ νμΈνλ©΄ λ©λλ€.
- νμ΄λ‘λμ μΆκ° μμ±μ ν΅ν΄ λ³΄λ€ μ μ°ν μ‘μΈμ€ μ μ΄.
- ν€λ λ° νμ΄λ‘λμ ν ν° μλͺ μ μ¬μ©νλ©΄ μ루μ μ 체μ 보μμ΄ ν₯μλ©λλ€.
JWT ν ν° - ꡬμ±
μ΄λ¦ - κΈ°λ³Έμ μΌλ‘ ν€λμλ ν ν° μ νκ³Ό μνΈνμ μ¬μ©λλ μκ³ λ¦¬μ¦λ§ ν¬ν¨λ©λλ€.
ν ν° μ νμ "typ" ν€μ μ μ₯λ©λλ€. JWTμμ 'μ ν' ν€λ 무μλ©λλ€. "typ" ν€κ° μλ κ²½μ° ν΄λΉ κ°μ μ΄ κ°μ²΄κ° JSON μΉ ν ν°μμ λνλ΄λ JWTμ¬μΌ ν©λλ€.
λ λ²μ§Έ ν€ "alg"λ ν ν°μ μνΈννλ λ° μ¬μ©λλ μκ³ λ¦¬μ¦μ μ μν©λλ€. κΈ°λ³Έμ μΌλ‘ HS256μΌλ‘ μ€μ λμ΄μΌ ν©λλ€. ν€λλ base64λ‘ μΈμ½λ©λ©λλ€.
{ "alg": "HS256", "μ ν": "JWT"}
νμ΄λ‘λ(μ½ν
μΈ ) - νμ΄λ‘λλ νμΈν΄μΌ νλ λͺ¨λ μ 보λ₯Ό μ μ₯ν©λλ€. νμ΄λ‘λμ κ° ν€λ₯Ό "ν΄λ μ"μ΄λΌκ³ ν©λλ€. μλ₯Ό λ€μ΄ μ΄λ(λΉκ³΅κ° νλ‘λͺ¨μ
)λ₯Ό ν΅ν΄μλ§ μ ν리μΌμ΄μ
μ μ
μ₯ν μ μμ΅λλ€. μ°λ¦¬λ λκ΅°κ°λ₯Ό μ΄λνκ³ μΆμ λ μ΄λ νΈμ§λ₯Ό 보λ
λλ€. μ΄λ©μΌ μ£Όμκ° μ΄λλ₯Ό μλ½ν μ¬λμ κ²μΈμ§ νμΈνλ κ²μ΄ μ€μνλ―λ‘ μ΄ μ£Όμλ₯Ό νμ΄λ‘λμ ν¬ν¨νκ³ μ΄λ₯Ό μν΄ "email" ν€μ μ μ₯ν©λλ€.
{ "μ΄λ©μΌ": "example@x5.ru" }
νμ΄λ‘λμ ν€λ μμμ μΌ μ μμ΅λλ€. κ·Έλ¬λ μμ½λ λͺ κ°μ§κ° μμ΅λλ€.
- iss(Issuer) - ν ν°μ΄ μ μ‘λλ μ ν리μΌμ΄μ μ μλ³ν©λλ€.
- sub(μ λͺ©) - ν ν°μ μ λͺ©μ μ μν©λλ€.
- aud(λμ)λ μ΄ ν ν°μ μμ μ λͺ©λ‘μΈ λμλ¬Έμ κ΅¬λΆ λ¬Έμμ΄ λλ URIμ λ°°μ΄μ λλ€. μμ μΈ‘μμ μ£Όμ΄μ§ ν€κ° μλ JWTλ₯Ό μμ νλ©΄ μμ μμ JWTκ° μλμ§ νμΈν΄μΌ ν©λλ€. κ·Έλ μ§ μμΌλ©΄ ν ν°μ 무μν©λλ€.
- exp(λ§λ£ μκ°) - ν ν°μ΄ λ§λ£λλ μκΈ°λ₯Ό λνλ λλ€. JWT νμ€μ λͺ¨λ ꡬνμ΄ λ§λ£λ ν ν°μ κ±°λΆνλλ‘ μꡬν©λλ€. exp ν€λ μ λμ€ νμμ νμμ€ν¬νμ¬μΌ ν©λλ€.
- nbf(Not Before)λ ν ν°μ΄ μ ν¨ν΄μ§λ μκ°μ κ²°μ νλ μ λμ€ νμμ μκ°μ λλ€.
- iat(Issued At) - μ΄ ν€λ ν ν°μ΄ λ°νλ μκ°μ λνλ΄λ©° JWTμ μλͺ μ κ²°μ νλ λ° μ¬μ©ν μ μμ΅λλ€. iat ν€λ Unix νμμ νμμ€ν¬νμ¬μΌ ν©λλ€.
- Jti(JWT ID) β μ΄ ν ν°μ κ³ μ μλ³μλ₯Ό μ μνλ λ¬Έμμ΄μ΄λ©° λμλ¬Έμλ₯Ό ꡬλΆν©λλ€.
νμ΄λ‘λκ° μνΈνλ ννλ‘ μ μ‘λμ§ μλλ€λ μ μ μ΄ν΄νλ κ²μ΄ μ€μν©λλ€(ν ν°μ μ€μ²©ν μ μκ³ κ·Έλ° λ€μ μνΈνλ λ°μ΄ν°λ₯Ό μ μ‘ν μ μμ). λ°λΌμ λΉλ° μ 보λ₯Ό μ μ₯ν μ μμ΅λλ€. ν€λμ λ§μ°¬κ°μ§λ‘ νμ΄λ‘λλ base64λ‘ μΈμ½λ©λ©λλ€.
μλͺ
- μ λͺ©κ³Ό νμ΄λ‘λκ° μμΌλ©΄ μλͺ
μ κ³μ°ν μ μμ΅λλ€.
Base64 μΈμ½λ©: ν€λμ νμ΄λ‘λλ₯Ό κ°μ Έμ€κ³ μ μ ν΅ν΄ λ¬Έμμ΄λ‘ κ²°ν©ν©λλ€. κ·Έλ° λ€μ μ΄ λ¬Έμμ΄κ³Ό λΉλ° ν€κ° ν€λμ μ§μ λ μνΈν μκ³ λ¦¬μ¦("alg" ν€)μ μ λ ₯λ©λλ€. ν€λ λͺ¨λ λ¬Έμμ΄μ΄ λ μ μμ΅λλ€. ν½μ νλ λ° μκ°μ΄ λ μ€λ 걸리λ―λ‘ λ κΈ΄ λ¬Έμμ΄μ΄ κ°μ₯ μ νΈλ©λλ€.
{"alg":"RSA1_5","νμ΄λ‘λ":"A128CBC-HS256"}
Keycloak μ₯μ μ‘°μΉ ν΄λ¬μ€ν° μν€ν μ² κ΅¬μΆ
λͺ¨λ νλ‘μ νΈμ λ¨μΌ ν΄λ¬μ€ν°λ₯Ό μ¬μ©νλ κ²½μ° SSO μ루μ μ λν μꡬ μ¬νμ΄ μ¦κ°ν©λλ€. νλ‘μ νΈ μκ° μ μ κ²½μ° μ΄λ¬ν μꡬ μ¬νμ λͺ¨λ νλ‘μ νΈμμ λμ λμ§ μμ§λ§ μ¬μ©μ λ° ν΅ν© μκ° μ¦κ°ν¨μ λ°λΌ κ°μ©μ± λ° μ±λ₯μ λν μꡬ μ¬νμ΄ μ¦κ°ν©λλ€.
λ¨μΌ SSO μ€ν¨μ μνμ΄ μ¦κ°νλ©΄ μ루μ μν€ν μ²μ λν μꡬ μ¬νκ³Ό μ€λ³΅ κ΅¬μ± μμμ μ¬μ©λλ λ°©λ²μ΄ μ¦κ°νκ³ λ§€μ° μ격ν SLAλ‘ μ΄μ΄μ§λλ€. μ΄μ κ΄λ ¨νμ¬ μ루μ ꡬνμ κ°λ° λλ μ΄κΈ° λ¨κ³μμ λ μμ£Ό νλ‘μ νΈμλ μ체 λ΄κ²°ν¨μ±μ΄ μλ μΈνλΌκ° μμ΅λλ€. κ°λ°μ΄ μ§νλ¨μ λ°λΌ κ°λ° λ° νμ₯μ μν κΈ°νλ₯Ό λ§λ ¨ν΄μΌ ν©λλ€. 컨ν μ΄λ κ°μν λλ νμ΄λΈλ¦¬λ μ κ·Ό λ°©μμ μ¬μ©νμ¬ μ₯μ μ‘°μΉ ν΄λ¬μ€ν°λ₯Ό ꡬμΆνλ κ²μ΄ κ°μ₯ μ μ°ν©λλ€.
νμ±/νμ± λ° νμ±/μλ ν΄λ¬μ€ν° λͺ¨λμμ μμ νλ €λ©΄ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€μμ λ°μ΄ν° μΌκ΄μ±μ 보μ₯ν΄μΌ ν©λλ€. λ λ°μ΄ν°λ² μ΄μ€ λ Έλλ μλ‘ λ€λ₯Έ μ§μμ λΆμ°λ λ°μ΄ν° μΌν° κ°μ λκΈ°μμΌλ‘ 볡μ λμ΄μΌ ν©λλ€.
λ΄κ²°ν¨μ± μ€μΉμ κ°μ₯ κ°λ¨ν μμ λλ€.

λ¨μΌ ν΄λ¬μ€ν°λ₯Ό μ¬μ©νλ©΄ μ΄λ€ μ΄μ μ΄ μμ΅λκΉ?
- κ³ κ°μ©μ± λ° μ±λ₯.
- μλ λͺ¨λ μ§μ: νμ±/νμ±, νμ±/μλ.
- λμ μΌλ‘ νμ₯νλ κΈ°λ₯ - 컨ν μ΄λ κ°μνλ₯Ό μ¬μ©ν λ.
- μ€μ μ§μ€μ κ΄λ¦¬ λ° λͺ¨λν°λ§ κ°λ₯μ±.
- νλ‘μ νΈμμ μ¬μ©μ μλ³/μΈμ¦/κΆν λΆμ¬λ₯Ό μν ν΅ν© μ κ·Ό λ°©μ.
- μ¬μ©μ κ°μ μμ΄ μλ‘ λ€λ₯Έ νλ‘μ νΈ κ°μ λ³΄λ€ ν¬λͺ ν μνΈ μμ©.
- λ€μν νλ‘μ νΈμμ JWT ν ν°μ μ¬μ¬μ©ν μ μλ κΈ°λ₯.
- λ¨μΌ μ λ’° μ§μ .
- λ§μ΄ν¬λ‘μλΉμ€/컨ν μ΄λ κ°μνλ₯Ό μ¬μ©νμ¬ νλ‘μ νΈλ₯Ό λ λΉ λ₯΄κ² μμν©λλ€(μΆκ° κ΅¬μ± μμλ₯Ό λ€μ΄ μ¬λ¦¬κ³ ꡬμ±ν νμ μμ).
- 곡κΈμ 체λ‘λΆν° μμ μ μ§μμ ꡬ맀ν μ μμ΅λλ€.
ν΄λ¬μ€ν°λ₯Ό κ³νν λ μ°ΎμμΌ ν μ¬ν
DBMS
Keycloakμ λ°μ΄ν°λ² μ΄μ€ κ΄λ¦¬ μμ€ν
μ μ¬μ©νμ¬ μμ, ν΄λΌμ΄μΈνΈ, μ¬μ©μ λ±μ μ μ₯ν©λλ€.
MS SQL, Oracle, MySQL, PostgreSQLκ³Ό κ°μ κ΄λ²μν DBMSκ° μ§μλ©λλ€. Keycloakμ μ체 λ΄μ₯ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€μ ν¨κ» μ 곡λ©λλ€. κ°λ° νκ²½κ³Ό κ°μ΄ λ‘λλμ§ μμ νκ²½μμ μ¬μ©νλ κ²μ΄ μ’μ΅λλ€.
νμ±/νμ± λ° νμ±/μλ ν΄λ¬μ€ν° λͺ¨λμμ μμ νλ €λ©΄ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€μ λ°μ΄ν° μΌκ΄μ±μ΄ νμνλ©° λ λ°μ΄ν°λ² μ΄μ€ ν΄λ¬μ€ν° λ Έλλ λ°μ΄ν° μΌν° κ°μ λκΈ°μμΌλ‘ 볡μ λ©λλ€.
λΆμ° μΊμ(Infinspan)
ν΄λ¬μ€ν°κ° μ¬λ°λ₯΄κ² μλνλ €λ©΄ JBoss Data Gridλ₯Ό μ¬μ©νμ¬ λ€μ μ νμ μΊμμ λν μΆκ° λκΈ°νκ° νμν©λλ€.
μΈμ¦ μΈμ - νΉμ μ¬μ©μλ₯Ό μΈμ¦ν λ λ°μ΄ν°λ₯Ό μ μ₯νλ λ° μ¬μ©λ©λλ€. μ΄ μΊμμ μμ²μλ μΌλ°μ μΌλ‘ μ ν리μΌμ΄μ μ΄ μλ λΈλΌμ°μ μ Keycloak μλ²λ§ ν¬ν¨λ©λλ€.
μμ ν ν°μ μ¬μ©μκ° λΉλκΈ°μ μΌλ‘(μ΄λ©μΌμ ν΅ν΄) μμ μ νμΈν΄μΌ νλ μλ리μ€μ μ¬μ©λ©λλ€. μλ₯Ό λ€μ΄ λΉλ°λ²νΈ λΆμ€ νλ¦ μ€μ actionTokens Infinispan μΊμλ μ΄λ―Έ μ¬μ©λ μ°κ²°λ μμ ν ν°μ λν λ©νλ°μ΄ν°λ₯Ό μΆμ νλ λ° μ¬μ©λλ―λ‘ μ¬μ¬μ©ν μ μμ΅λλ€.
μꡬ λ°μ΄ν°μ μΊμ± λ° λ¬΄ν¨ν - λ°μ΄ν°λ² μ΄μ€μ λν λΆνμν 쿼리λ₯Ό λ°©μ§νκΈ° μν΄ μꡬ λ°μ΄ν°λ₯Ό μΊμνλ λ° μ¬μ©λ©λλ€. Keycloak μλ²κ° λ°μ΄ν°λ₯Ό μ λ°μ΄νΈνλ©΄ λͺ¨λ λ°μ΄ν° μΌν°μ λ€λ₯Έ λͺ¨λ Keycloak μλ²κ° μ΄μ λν΄ μμμΌ ν©λλ€.
μμ - ν΄λ¬μ€ν° λ Έλμ λ°μ΄ν° μΌν° κ°μ μ ν¨νμ§ μμ λ©μμ§λ₯Ό 보λ΄λ λ°λ§ μ¬μ©λ©λλ€.
μ¬μ©μ μΈμ - μ¬μ©μμ λΈλΌμ°μ μΈμ κΈ°κ° λμ μ ν¨ν μ¬μ©μ μΈμ μ λν λ°μ΄ν°λ₯Ό μ μ₯νλ λ° μ¬μ©λ©λλ€. μΊμλ μ΅μ’ μ¬μ©μμ μ ν리μΌμ΄μ μ HTTP μμ²μ μ²λ¦¬ν΄μΌ ν©λλ€.
λ¬΄μ°¨λ³ λμ λ³΄νΈ - μ€ν¨ν λ‘κ·ΈμΈμ λν λ°μ΄ν°λ₯Ό μΆμ νλ λ° μ¬μ©λ©λλ€.
λΆν λΆμ°
λ‘λ λ°Έλ°μλ keycloakμ λν λ¨μΌ μ§μ μ μ΄λ©° κ³ μ μΈμ μ μ§μν΄μΌ ν©λλ€.
μ ν리μΌμ΄μ μλ²
κ΅¬μ± μμ κ°μ μνΈ μμ©μ μ μ΄νλ ββλ° μ¬μ©λλ©° κΈ°μ‘΄ μλν λꡬ λ° μΈνλΌ μλν λꡬμ λμ νμ₯μ μ¬μ©νμ¬ κ°μννκ±°λ 컨ν μ΄λνν μ μμ΅λλ€. OpenShift, Kubernates, Rancherμμ κ°μ₯ μΌλ°μ μΈ λ°°ν¬ μλ리μ€.
μ΄κ²μΌλ‘ 첫 λ²μ§Έ λΆλΆμΈ μ΄λ‘ μ λΆλΆμ λ§μΉ©λλ€. λ€μ κΈ°μ¬ μ리μ¦μμλ λ€μν ID 곡κΈμμμ ν΅ν© μ λ° μ€μ μλ₯Ό λΆμν©λλ€.
μΆμ² : habr.com
