๋ชจ๋ ๋๊ธฐ์ ์์ 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 ์น ํ ํฐ)๋ ๊ฐ๋ฐฉํ ํ์ค(
ํ์ค์ ๋ฐ๋ฅด๋ฉด ํ ํฐ์ ์ ์ผ๋ก ๊ตฌ๋ถ๋ base-64 ํ์์ ์ธ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ฒซ ๋ฒ์งธ ๋ถ๋ถ์ ํค๋๋ผ๊ณ ํ๋ฉฐ ์ฌ๊ธฐ์๋ ํ ํฐ ์ ํ๊ณผ ๋์งํธ ์๋ช ์ ์ป๊ธฐ ์ํ ํด์ ์๊ณ ๋ฆฌ์ฆ์ ์ด๋ฆ์ด ํฌํจ๋ฉ๋๋ค. ๋ ๋ฒ์งธ ๋ถ๋ถ์ ๊ธฐ๋ณธ ์ ๋ณด(์ฌ์ฉ์, ์์ฑ ๋ฑ)๋ฅผ ์ ์ฅํฉ๋๋ค. ์ธ ๋ฒ์งธ ๋ถ๋ถ์ ๋์งํธ ์๋ช ์ ๋๋ค.
. .
DB์ ํ ํฐ์ ์ ์ฅํ์ง ๋ง์ญ์์ค. ์ ํจํ ํ ํฐ์ ์ํธ์ ๋์ผํ๋ฏ๋ก ํ ํฐ์ ์ ์ฅํ๋ ๊ฒ์ ์ผ๋ฐ ํ
์คํธ๋ก ์ํธ๋ฅผ ์ ์ฅํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
์ก์ธ์ค ํ ํฐ ๋ณด์ ์๋ฒ ๋ฆฌ์์ค์ ๋ํ ์์ ์ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ๋ ํ ํฐ์
๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์๋ช
์ด ์งง๊ณ ํ ํฐ์ ์์ฒญํ๋ ๋น์ฌ์์ IP ์ฃผ์์ ๊ฐ์ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
์๋ก ๊ณ ์นจ ํ ํฐ ํด๋ผ์ด์ธํธ๊ฐ ์๋ช ์ด ๋ง๋ฃ๋ ํ ์ ์ก์ธ์ค ํ ํฐ์ ์์ฒญํ ์ ์๋๋ก ํ๋ ํ ํฐ์ ๋๋ค. ์ด๋ฌํ ํ ํฐ์ ์ผ๋ฐ์ ์ผ๋ก ์ฅ๊ธฐ๊ฐ ๋ฐํ๋ฉ๋๋ค.
๋ง์ดํฌ๋ก ์๋น์ค ์ํคํ ์ฒ์์ ์ฌ์ฉํ ๋์ ์ฃผ์ ์ด์ :
- XNUMXํ ์ธ์ฆ์ ํตํด ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ ์๋น์ค์ ์ ๊ทผํ ์ ์๋ ๊ธฐ๋ฅ.
- ์ฌ์ฉ์ ํ๋กํ์ ํ์ ์์ฑ์ด ๋ง์ง ์์ ๊ฒฝ์ฐ ํ์ด๋ก๋์ ์ถ๊ฐํ ์ ์๋ ๋ฐ์ดํฐ(์๋ ๋ฐ ์ฆ์ ํฌํจ)๋ก ๋ณด๊ฐํ ์ ์์ต๋๋ค.
- ํ์ฑ ์ธ์ ์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ ํ์๊ฐ ์์ผ๋ฉฐ ์๋ฒ ์์ฉ ํ๋ก๊ทธ๋จ์ ์๋ช ๋ง ํ์ธํ๋ฉด ๋ฉ๋๋ค.
- ํ์ด๋ก๋์ ์ถ๊ฐ ์์ฑ์ ํตํด ๋ณด๋ค ์ ์ฐํ ์ก์ธ์ค ์ ์ด.
- ํค๋ ๋ฐ ํ์ด๋ก๋์ ํ ํฐ ์๋ช ์ ์ฌ์ฉํ๋ฉด ์๋ฃจ์ ์ ์ฒด์ ๋ณด์์ด ํฅ์๋ฉ๋๋ค.
JWT ํ ํฐ - ๊ตฌ์ฑ
์ด๋ฆ - ๊ธฐ๋ณธ์ ์ผ๋ก ํค๋์๋ ํ ํฐ ์ ํ๊ณผ ์ํธํ์ ์ฌ์ฉ๋๋ ์๊ณ ๋ฆฌ์ฆ๋ง ํฌํจ๋ฉ๋๋ค.
ํ ํฐ ์ ํ์ "typ" ํค์ ์ ์ฅ๋ฉ๋๋ค. JWT์์ '์ ํ' ํค๋ ๋ฌด์๋ฉ๋๋ค. "typ" ํค๊ฐ ์๋ ๊ฒฝ์ฐ ํด๋น ๊ฐ์ ์ด ๊ฐ์ฒด๊ฐ JSON ์น ํ ํฐ์์ ๋ํ๋ด๋ JWT์ฌ์ผ ํฉ๋๋ค.
๋ ๋ฒ์งธ ํค "alg"๋ ํ ํฐ์ ์ํธํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก HS256์ผ๋ก ์ค์ ๋์ด์ผ ํฉ๋๋ค. ํค๋๋ base64๋ก ์ธ์ฝ๋ฉ๋ฉ๋๋ค.
{ "alg": "HS256", "์ ํ": "JWT"}
ํ์ด๋ก๋(์ฝํ
์ธ ) - ํ์ด๋ก๋๋ ํ์ธํด์ผ ํ๋ ๋ชจ๋ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค. ํ์ด๋ก๋์ ๊ฐ ํค๋ฅผ "ํด๋ ์"์ด๋ผ๊ณ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ด๋(๋น๊ณต๊ฐ ํ๋ก๋ชจ์
)๋ฅผ ํตํด์๋ง ์ ํ๋ฆฌ์ผ์ด์
์ ์
์ฅํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋๊ตฐ๊ฐ๋ฅผ ์ด๋ํ๊ณ ์ถ์ ๋ ์ด๋ ํธ์ง๋ฅผ ๋ณด๋
๋๋ค. ์ด๋ฉ์ผ ์ฃผ์๊ฐ ์ด๋๋ฅผ ์๋ฝํ ์ฌ๋์ ๊ฒ์ธ์ง ํ์ธํ๋ ๊ฒ์ด ์ค์ํ๋ฏ๋ก ์ด ์ฃผ์๋ฅผ ํ์ด๋ก๋์ ํฌํจํ๊ณ ์ด๋ฅผ ์ํด "email" ํค์ ์ ์ฅํฉ๋๋ค.
{ "์ด๋ฉ์ผ": "[์ด๋ฉ์ผ ๋ณดํธ]"}
ํ์ด๋ก๋์ ํค๋ ์์์ ์ผ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์์ฝ๋ ๋ช ๊ฐ์ง๊ฐ ์์ต๋๋ค.
- 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