๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์˜ SSO. ์šฐ๋ฆฌ๋Š” Keycloak์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 1 ๋ถ€

๋ชจ๋“  ๋Œ€๊ธฐ์—…์—์„œ X5 Retail Group๋„ ์˜ˆ์™ธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ๊ฐœ๋ฐœํ•จ์— ๋”ฐ๋ผ ์‚ฌ์šฉ์ž ์ธ์ฆ์ด ํ•„์š”ํ•œ ํ”„๋กœ์ ํŠธ์˜ ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ํ•œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋‹ค๋ฅธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์‚ฌ์šฉ์ž๋ฅผ ์›ํ™œํ•˜๊ฒŒ ์ „ํ™˜ํ•ด์•ผ ํ•˜๋ฉฐ ๋‹จ์ผ SSO(Single-Sing-On) ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ AD์™€ ๊ฐ™์€ ID ์ œ๊ณต์ž ๋˜๋Š” ์ถ”๊ฐ€ ์†์„ฑ์ด ์—†๋Š” ๊ธฐํƒ€๊ฐ€ ์ด๋ฏธ ๋‹ค์–‘ํ•œ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ? "์‹๋ณ„ ๋ธŒ๋กœ์ปค"๋ผ๊ณ  ํ•˜๋Š” ์‹œ์Šคํ…œ ํด๋ž˜์Šค๊ฐ€ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๊ธฐ๋Šฅ์ ์ธ ๊ฒƒ์€ Keycloak, Gravitee ์•ก์„ธ์Šค ๊ด€๋ฆฌ ๋“ฑ๊ณผ ๊ฐ™์€ ๋Œ€ํ‘œ์ž…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๊ธฐ๊ณ„ ์ƒํ˜ธ ์ž‘์šฉ, ์‚ฌ์šฉ์ž ์ฐธ์—ฌ ๋“ฑ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์†”๋ฃจ์…˜์€ ๋ชจ๋“  ์š”๊ตฌ ์‚ฌํ•ญ์„ ํ•˜๋‚˜๋กœ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์—ฐํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์†”๋ฃจ์…˜์„ ์šฐ๋ฆฌ ํšŒ์‚ฌ๋Š” ์ด์ œ ํ‘œ์‹œ ๋ธŒ๋กœ์ปค์ธ Keycloak์„ ๋ณด์œ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์˜ SSO. ์šฐ๋ฆฌ๋Š” Keycloak์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 1 ๋ถ€

Keycloak์€ RedHat์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ID ๋ฐ ์•ก์„ธ์Šค ์ œ์–ด ์ œํ’ˆ์ž…๋‹ˆ๋‹ค. SSO - RH-SSO๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํšŒ์‚ฌ ์ œํ’ˆ์˜ ๊ธฐ์ดˆ์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๊ฐœ๋…

์†”๋ฃจ์…˜๊ณผ ์ ‘๊ทผ ๋ฐฉ์‹์„ ๋‹ค๋ฃจ๊ธฐ ์ „์— ํ”„๋กœ์„ธ์Šค์˜ ์šฉ์–ด์™€ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์˜ SSO. ์šฐ๋ฆฌ๋Š” Keycloak์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 1 ๋ถ€

์‹ ๋ถ„์ฆ ์‹๋ณ„์ž๋กœ ์ฃผ์ œ๋ฅผ ์ธ์‹ํ•˜๋Š” ์ ˆ์ฐจ์ž…๋‹ˆ๋‹ค(์ฆ‰, ์ด๊ฒƒ์€ ์ด๋ฆ„, ๋กœ๊ทธ์ธ ๋˜๋Š” ๋ฒˆํ˜ธ์˜ ์ •์˜์ž…๋‹ˆ๋‹ค).

์ธ์ฆ - ์ธ์ฆ ์ ˆ์ฐจ์ž…๋‹ˆ๋‹ค. (๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ์ด์šฉ์ž ํ™•์ธ, ์ „์ž์„œ๋ช…์œผ๋กœ ๋ฌธ์ž ํ™•์ธ ๋“ฑ)

๊ถŒํ•œ ๋ถ€์—ฌ - ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ์ œ๊ณต(์˜ˆ: ์ด๋ฉ”์ผ)์ž…๋‹ˆ๋‹ค.

์‹ ์› ์ค‘๊ฐœ์ธ ํ‚คํด๋ก

์—ด์‡ ๋งํ†  ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” 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 https://www.keycloak.org/docs-api/8.0/rest-api/index.html
์ž๋ฐ” API https://www.keycloak.org/docs-api/8.0/javadocs/index.html

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ID ๊ณต๊ธ‰์ž(์˜จํ”„๋ ˆ๋ฏธ์Šค)

์‚ฌ์šฉ์ž ์—ฐํ•ฉ ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•˜๋Š” ๊ธฐ๋Šฅ.

๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์˜ SSO. ์šฐ๋ฆฌ๋Š” Keycloak์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 1 ๋ถ€

ํ†ต๊ณผ ์ธ์ฆ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ 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 ๊ด€๋ฆฌ ์ฝ˜์†”์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ ์ด ๊ธฐ๋Šฅ์€ ์ฆ‰์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ๋‹จ๊ณ„์—์„œ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์˜ SSO. ์šฐ๋ฆฌ๋Š” Keycloak์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 1 ๋ถ€

์‚ฌ์šฉ์ž ์ธ์ฆ์„ ์œ„ํ•ด OpenID/SAML ID ๊ณต๊ธ‰์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Keycloak์—์„œ OAuth2๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ์ธ์ฆ ์‹œ๋‚˜๋ฆฌ์˜ค

์ธ์ฆ ์ฝ”๋“œ ํ๋ฆ„ - ์„œ๋ฒ„ ์ธก ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์™ธ๋ถ€์ธ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์†Œ์Šค ์ฝ”๋“œ์™€ ํด๋ผ์ด์–ธํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์ธ์ฆ ๊ถŒํ•œ ์œ ํ˜• ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ํ”„๋กœ์„ธ์Šค๋Š” ๋ฆฌ๋””๋ ‰์…˜์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์›น ๋ธŒ๋ผ์šฐ์ €์™€ ๊ฐ™์€ ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ(์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ)์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ๋ฅผ ํ†ตํ•ด ๋ฆฌ๋””๋ ‰์…˜๋˜๋Š” API ์ธ์ฆ ์ฝ”๋“œ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•”์‹œ์  ํ๋ฆ„ - ๋ชจ๋ฐ”์ผ ๋˜๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(์‚ฌ์šฉ์ž ์žฅ์น˜์—์„œ ์‹คํ–‰๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜)์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์•”์‹œ์  ์ธ์ฆ ๊ถŒํ•œ ์œ ํ˜•์€ ํด๋ผ์ด์–ธํŠธ ๊ธฐ๋ฐ€์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์—†๋Š” ๋ชจ๋ฐ”์ผ ๋ฐ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์•”์‹œ์  ๊ถŒํ•œ ์œ ํ˜•์€ ๋˜ํ•œ ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ ๋ฆฌ๋””๋ ‰์…˜์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ถ”๊ฐ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์•ก์„ธ์Šค ํ† ํฐ์ด ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ์— ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์‚ฌ์šฉ์ž์™€ ์‚ฌ์šฉ์ž ์žฅ์น˜์˜ ๋‹ค๋ฅธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ํ† ํฐ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์œ ํ˜•์˜ ์Šน์ธ ๊ถŒํ•œ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ID๋ฅผ ์ธ์ฆํ•˜์ง€ ์•Š์œผ๋ฉฐ ํ”„๋กœ์„ธ์Šค ์ž์ฒด๋Š” ๋ฆฌ๋””๋ ‰์…˜ URL(์ด์ „์— ์„œ๋น„์Šค์— ๋“ฑ๋ก๋จ)์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค.

์•”์‹œ์  ํ๋ฆ„์€ ์•ก์„ธ์Šค ํ† ํฐ ์ƒˆ๋กœ ๊ณ ์นจ ํ† ํฐ์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ ์ž๊ฒฉ ์ฆ๋ช… ๋ถ€์—ฌ ํ๋ฆ„ โ€” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด API์— ์•ก์„ธ์Šคํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ์œ ํ˜•์˜ ๊ถŒํ•œ ๋ถ€์—ฌ ๊ถŒํ•œ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ฆ‰๊ฐ์ ์ธ ์‚ฌ์šฉ์ž ์ƒํ˜ธ ์ž‘์šฉ ์—†์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์„œ๋ฒ„ ๊ฐ„ ์ƒํ˜ธ ์ž‘์šฉ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์ž๊ฒฉ ์ฆ๋ช… ๋ถ€์—ฌ ํ๋ฆ„์„ ํ†ตํ•ด ์›น ์„œ๋น„์Šค(๊ธฐ๋ฐ€ ํด๋ผ์ด์–ธํŠธ)๋Š” ๋‹ค๋ฅธ ์›น ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์ธ์ฆ์„ ์œ„ํ•ด ์‚ฌ์šฉ์ž๋ฅผ ๊ฐ€์žฅํ•˜๋Š” ๋Œ€์‹  ์ž์ฒด ์ž๊ฒฉ ์ฆ๋ช…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ๋†’์€ ์ˆ˜์ค€์˜ ๋ณด์•ˆ์„ ์œ„ํ•ด ํ˜ธ์ถœ ์„œ๋น„์Šค๊ฐ€ ์ธ์ฆ์„œ(๊ณต์œ  ๋น„๋ฐ€ ๋Œ€์‹ )๋ฅผ ์ž๊ฒฉ ์ฆ๋ช…์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

OAuth2 ์‚ฌ์–‘์€ ๋‹ค์Œ์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
RFC-6749
RFC-8252
RFC-6819

JWT ํ† ํฐ๊ณผ ๊ทธ ์ด์ 

JWT(JSON ์›น ํ† ํฐ)๋Š” ๊ฐœ๋ฐฉํ˜• ํ‘œ์ค€(https://tools.ietf.org/html/rfc7519) 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๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค. ์ด์™€ ๊ด€๋ จํ•˜์—ฌ ์†”๋ฃจ์…˜ ๊ตฌํ˜„์˜ ๊ฐœ๋ฐœ ๋˜๋Š” ์ดˆ๊ธฐ ๋‹จ๊ณ„์—์„œ ๋” ์ž์ฃผ ํ”„๋กœ์ ํŠธ์—๋Š” ์ž์ฒด ๋‚ด๊ฒฐํ•จ์„ฑ์ด ์—†๋Š” ์ธํ”„๋ผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ด ์ง„ํ–‰๋จ์— ๋”ฐ๋ผ ๊ฐœ๋ฐœ ๋ฐ ํ™•์žฅ์„ ์œ„ํ•œ ๊ธฐํšŒ๋ฅผ ๋งˆ๋ จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ๊ฐ€์ƒํ™” ๋˜๋Š” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์žฅ์•  ์กฐ์น˜ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์œ ์—ฐํ•ฉ๋‹ˆ๋‹ค.

ํ™œ์„ฑ/ํ™œ์„ฑ ๋ฐ ํ™œ์„ฑ/์ˆ˜๋™ ํด๋Ÿฌ์Šคํ„ฐ ๋ชจ๋“œ์—์„œ ์ž‘์—…ํ•˜๋ ค๋ฉด ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋…ธ๋“œ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์ง€์—ญ์— ๋ถ„์‚ฐ๋œ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ๊ฐ„์— ๋™๊ธฐ์‹์œผ๋กœ ๋ณต์ œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฒฐํ•จ์„ฑ ์„ค์น˜์˜ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค.

๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์˜ SSO. ์šฐ๋ฆฌ๋Š” Keycloak์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 1 ๋ถ€

๋‹จ์ผ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–ค ์ด์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

  • ๊ณ ๊ฐ€์šฉ์„ฑ ๋ฐ ์„ฑ๋Šฅ.
  • ์ž‘๋™ ๋ชจ๋“œ ์ง€์›: ํ™œ์„ฑ/ํ™œ์„ฑ, ํ™œ์„ฑ/์ˆ˜๋™.
  • ๋™์ ์œผ๋กœ ํ™•์žฅํ•˜๋Š” ๊ธฐ๋Šฅ - ์ปจํ…Œ์ด๋„ˆ ๊ฐ€์ƒํ™”๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ.
  • ์ค‘์•™ ์ง‘์ค‘์‹ ๊ด€๋ฆฌ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ฐ€๋Šฅ์„ฑ.
  • ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉ์ž ์‹๋ณ„/์ธ์ฆ/๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ์œ„ํ•œ ํ†ตํ•ฉ ์ ‘๊ทผ ๋ฐฉ์‹.
  • ์‚ฌ์šฉ์ž ๊ฐœ์ž… ์—†์ด ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ ๊ฐ„์˜ ๋ณด๋‹ค ํˆฌ๋ช…ํ•œ ์ƒํ˜ธ ์ž‘์šฉ.
  • ๋‹ค์–‘ํ•œ ํ”„๋กœ์ ํŠธ์—์„œ 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

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€