๐ŸŒฑ Infra/KeyCloak

[keycloak ๋ง›๋ณด๊ธฐ#10] ์„ธ์…˜ ๋ฐ ํ† ํฐ ๊ด€๋ฆฌ

mini_world 2025. 3. 12. 02:15
๋ชฉ์ฐจ ์ ‘๊ธฐ

1๏ธโƒฃ ๊ฐœ์š”

Keycloak์€ ์‚ฌ์šฉ์ž ์ธ์ฆ๊ณผ ๊ถŒํ•œ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ Identity And Access management ์†”๋ฃจ์…˜์ด๋‹ค.
IAM ์†”๋ฃจ์…˜์œผ๋กœ์จ SSO(SingleSignOn), ์‚ฌ์šฉ์ž Federation ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์œ„ํ•ด์„œ๋Š” ์„ธ์…˜ ๋ฐ ํ† ํฐ ๊ด€๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๋Š”๊ฒƒ์ด ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค.
์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” Keycloak์˜ ์„ธ์…˜ ๋ฐ ํ† ํฐ ๊ด€๋ฆฌ์— ๋Œ€ํ•ด ๋‹ค๋ค„๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

๋“ค์–ด๊ฐ€๊ธฐ์ „์— ์„ธ์…˜๊ณผ ํ† ํฐ์— ๋Œ€ํ•œ ์•„์ฃผ ๊ฐ„๋‹จํ•œ ๊ฐœ๋… ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด์ž.

๊ตฌ๋ถ„ ์„ธ์…˜ (์ธ์ฆ) ํ† ํฐ (์ธ์ฆ+์ธ๊ฐ€)
๊ธฐ๋ณธ ๊ฐœ๋…
  • ์„œ๋ฒ„์— ์ €์žฅ๋˜๋Š” ์‚ฌ์šฉ์ž ์ƒํƒœ ์ •๋ณด
  • ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์ง€์†์ ์ธ ์—ฐ๊ฒฐ ์ƒํƒœ
  • ์„œ๋ฒ„ ์ธก์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋จ
  • ํด๋ผ์ด์–ธํŠธ์— ์ €์žฅ๋˜๋Š” ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ์ฆ๋ช…์„œ
  • ์ž์ฒด์ ์œผ๋กœ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐ์ดํ„ฐ ์กฐ๊ฐ
  • ์ฃผ๋กœ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ๊ด€๋ฆฌ๋จ
์ €์žฅ ์œ„์น˜ ์„œ๋ฒ„ ์ธก์— ์ €์žฅ (๋ฉ”๋ชจ๋ฆฌ/DB) ํด๋ผ์ด์–ธํŠธ ์ธก์— ์ €์žฅ (๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€, ์ฟ ํ‚ค ๋“ฑ)
์ƒํƒœ ๊ด€๋ฆฌ ์„œ๋ฒ„๊ฐ€ ์ƒํƒœ๋ฅผ ์œ ์ง€ (Stateful) ์„œ๋ฒ„๋Š” ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š์Œ (Stateless)
ํ™•์žฅ์„ฑ ์„œ๋ฒ„ ํ™•์žฅ ์‹œ ์„ธ์…˜ ๋™๊ธฐํ™” ๋ฌธ์ œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ O ์„œ๋ฒ„๊ฐ€ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„ ํ™•์žฅ ์˜ํ–ฅ X
์ธ์ฆ ๋ฐฉ์‹ ์„ธ์…˜ ID๋กœ ์‚ฌ์šฉ์ž ์‹๋ณ„ ์„œ๋ช…๋œ ํ† ํฐ์˜ ์œ ํšจ์„ฑ ๊ฒ€์ฆ์œผ๋กœ ์ธ์ฆ
๋ณด์•ˆ ์„ธ์…˜ ID ํƒˆ์ทจ ์œ„ํ—˜, ์„œ๋ฒ„ ์ธก์—์„œ ์„ธ์…˜ ๋ฌดํšจํ™” ๊ฐ€๋Šฅ ์„œ๋ช… ์œ„์กฐ ๋ฐฉ์ง€,
์ผ๋‹จ ๋ฐœ๊ธ‰๋œ ํ† ํฐ์€ ๋งŒ๋ฃŒ ์ „๊นŒ์ง€ ๋ฌดํšจํ™” ์–ด๋ ค์›€
Keycloak์—์„œ์˜ ์—ญํ•  ์‚ฌ์šฉ์ž์˜ ๋กœ๊ทธ์ธ ์ƒํƒœ ๊ด€๋ฆฌ, SSO ๊ตฌํ˜„ ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์‚ฌ์šฉ์ž ์ •๋ณด ๋ฐ ๊ถŒํ•œ ์ œ๊ณต
๊ธฐํƒ€ UserSession, ClientSession, Single Sign-On Session ... JWT(JSON Web Token),SAML ํ† ํฐ..
Access Token, Refresh Token, ID Token...

 

์ด์ œ Keycloak์—์„œ ์„ธ์…˜ ๋ฐ ํ† ํฐ์ด ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ ๋ฐ ๊ด€๋ฆฌ๋˜๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž.

 

 

2๏ธโƒฃ ์„ธ์…˜

 

์„ธ์…˜๊ด€๋ฆฌ

์„ธ์…˜์€ ์„œ๋ฒ„์— ์ €์žฅ๋˜๋Š” ์‚ฌ์šฉ์ž ์ƒํƒœ ์ •๋ณด์ด๋‹ค.
๋งŒ์•ฝ ์„ธ์…˜์ด ์„œ๋ฒ„์— ์ €์žฅ๋˜์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด, ์‚ฌ์šฉ์ž๋Š” ๋กœ๊ทธ์ธ ํ›„ ํŽ˜์ด์ง€ ์ด๋™์‹œ๋งˆ๋‹ค ๋‹ค์‹œ ๋กœ๊ทธ์ธ ํ•ด์•ผํ• ์ˆ˜๋„ ์žˆ๋‹ค.
์„ธ์…˜์„ ์–ด๋–ค ๊ด€์ ์—์„œ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด์ž๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • ์‚ฌ์šฉ์ž ๊ด€์ : ์ธ์ฆ์—ฌ๋ถ€(๋กœ๊ทธ์ธ์—ฌ๋ถ€), ์ธ์ฆ ๊ธฐ๊ฐ„(์„ธ์…˜๋งŒ๋ฃŒ๊ธฐ๊ฐ„), ์žฌ์ธ์ฆ ์‹œ๊ธฐ ๋“ฑ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์— ์˜ํ–ฅ ๋ฏธ์นจ 
  • ๋ณด์•ˆ ๊ด€์ : ์‚ฌ์šฉ์ž ํ™œ๋™์„ ์ถ”์  ๋ฐ ์ œ์–ด (ํ† ํฐ ๊ฒ€์ฆ/ ๋ฌดํšจํ™” ๋“ฑ)
  • ์„ฑ๋Šฅ ๊ด€์ : ํ™œ์„ฑ ์„ธ์…˜์„ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ ์„œ๋ฒ„์— ๋ถ€ํ•˜๋ฅผ ์ค„ ์ˆ˜ ์žˆ์Œ

 

์„ธ์…˜ ์ข…๋ฅ˜

๊ณต์‹๋ฌธ์„œ์—์„œ ์ •ํ™•ํžˆ ์–ด๋–ค ์„ธ์…˜๋“ค์„ ์‚ฌ์šฉํ•˜๊ณ ์žˆ๋Š”์ง€ ์ฐพ์•„๋ณด๋ ค๊ณ  ํ–ˆ์ง€๋งŒ ์ •๋ฆฌ๋˜์–ด์žˆ๋Š”๊ฑด ์ฐพ์ง€ ๋ชปํ–ˆ๊ณ ,
์ด์ „์—  [keycloak ๋ง›๋ณด๊ธฐ #7] Production Keycloak์„ ์œ„ํ•œ ์„ค์ • ๋ถ€๋ถ„์—์„œ Keycloak ๋‹ค์ค‘ ๋…ธ๋“œ ํด๋Ÿฌ์Šคํ„ฐ ์•„ํ‚คํ…์ณ๋ฅผ ๊ณต๋ถ€ํ• ๋•Œ, ์•„๋ž˜  ์„ธ์…˜๋“ค์ด Embedded ISPN Cache์— ์ €์žฅ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์–ธ๊ธ‰ํ•œ์ ์ด ์žˆ๋‹ค.

  • authenticationSessions: ์ธ์ฆ ํ”„๋กœ์„ธ์Šค ์ค‘์ธ ์„ธ์…˜ (์ธ์ฆ ํ๋ฆ„์ด ์™„๋ฃŒ๋˜์ง€ ์•Š์€ ์ƒํƒœ์˜ ์„ธ์…˜, (์˜ˆ: ์‚ฌ์šฉ์ž๋ช…/๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ, MFA, ์†Œ์…œ ๋กœ๊ทธ์ธ ๋“ฑ)์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ž„์‹œ ์„ธ์…˜)
  • sessions: ์‚ฌ์šฉ์ž ์„ธ์…˜ (์ธ์ฆ์ด ์™„๋ฃŒ๋œ ์‚ฌ์šฉ์ž์˜ ์„ธ์…˜, SSO ๊ธฐ๋Šฅ์ด ์ด ์„ธ์…˜์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•จ)
  • clientSessions: ํด๋ผ์ด์–ธํŠธ ์„ธ์…˜ (ํŠน์ • ํด๋ผ์ด์–ธํŠธ์™€ ์—ฐ๊ฒฐ๋œ ์„ธ์…˜)

Keycloak admin์—์„œ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž.

  • SSO Session Settings
    • SSO Session Idle: ์‚ฌ์šฉ์ž๊ฐ€ ํ™œ๋™ํ•˜์ง€ ์•Š์„ ๋•Œ ์„ธ์…˜์ด ์œ ์ง€๋˜๋Š” ์‹œ๊ฐ„ (๊ธฐ๋ณธ๊ฐ’ 30๋ถ„)
    • SSO Session Max: ์‚ฌ์šฉ์ž ์„ธ์…˜์˜ ์ตœ๋Œ€ ์œ ์ง€ ์‹œ๊ฐ„ (๊ธฐ๋ณธ๊ฐ’ 10์‹œ๊ฐ„)
    • ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€์— Remember Me ์˜ต์…˜์ด ์žˆ๋Š” ๊ฒฝ์šฐ Idle ์‹œ๊ฐ„๊ณผ Max ์‹œ๊ฐ„๋„ ๋ณ„๋„๋กœ ์„ค์ • ๊ฐ€๋Šฅ
  • Client Session Settings
    • Client Session Idle: ํŠน์ • ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•œ ์„ธ์…˜์ด ๋น„ํ™œ์„ฑ ์ƒํƒœ๋กœ ์œ ์ง€๋˜๋Š” ์‹œ๊ฐ„
    • Client Session Max: ํด๋ผ์ด์–ธํŠธ ์„ธ์…˜์˜ ์ตœ๋Œ€ ์œ ์ง€ ์‹œ๊ฐ„
  • Offline Session Settings
    • Offline Session Idle: ์˜คํ”„๋ผ์ธ ํ† ํฐ ์‚ฌ์šฉ ์‹œ ์„ธ์…˜์ด ์œ ์ง€๋˜๋Š” ๋น„ํ™œ์„ฑ ์‹œ๊ฐ„ (๊ธฐ๋ณธ๊ฐ’ 30์ผ)
    • Offline Session Max Limited: ์˜คํ”„๋ผ์ธ ์„ธ์…˜์˜ ์ตœ๋Œ€ ์œ ์ง€ ์‹œ๊ฐ„ ์ œํ•œ (๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”)
  • Login Settings
    • Login timeout: ๋กœ๊ทธ์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์™„๋ฃŒ๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ํƒ€์ž„์•„์›ƒ ์‹œ๊ฐ„ (๊ธฐ๋ณธ๊ฐ’ 30๋ถ„)
    • Login action timeout: ๋กœ๊ทธ์ธ ์•ก์…˜(์˜ˆ: OTP ์ž…๋ ฅ)์˜ ํƒ€์ž„์•„์›ƒ ์‹œ๊ฐ„ (๊ธฐ๋ณธ๊ฐ’ 5๋ถ„)

 

[์ฐธ๊ณ ] Offline Session ์ด๋ž€?

์˜คํ”„๋ผ์ธ ์„ธ์…˜(Offline Session)์€ Keycloak์—์„œ ์ œ๊ณตํ•˜๋Š” ํŠน๋ณ„ํ•œ ์œ ํ˜•์˜ ์„ธ์…˜์œผ๋กœ, ๊ณ„์† ์œ ์ง€๋˜๋Š” ์„ธ์…˜์ด๋ผ๊ณ  ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.
์‹ค ์ƒํ™ฉ์—์„œ๋Š” ๋ชจ๋ฐ”์ผ ์•ฑ ๋™์ž‘์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ฒ˜์Œ ๋กœ๊ทธ์ธ ํ›„ ๋ช‡ ์ฃผ ํ˜น์€ ๋ช‡ ๋‹ฌ ๋™์•ˆ ์•ฑ์— ์žฌ ๋กœ๊ทธ์ธ(์žฌ์ธ์ฆ)ํ•˜์ง€ ์•Š๊ณ  ์•ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ด์œ ๊ฐ€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ Offline Session์„ ์œ ์ง€ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (์‚ฌ์šฉ์˜ˆ์‹œ, IoT์žฅ๋น„, ํ‚ค์˜ค์Šคํฌ ๋ฐ ๊ณต์šฉ ๋‹จ๋ง๊ธฐ ๋“ฑ)
OfflineSession์„ ์œ„ํ•ด์„œ๋Š” OfflineToken์ด ์‚ฌ์šฉ๋˜๋ฉฐ, offline_access ์Šค์ฝ”ํ”„๋ฅผ ์š”์ฒญํ•  ๋•Œ ๋ฐœ๊ธ‰๋œ๋‹ค.

 

์„ธ์…˜์˜ ๊ณ„์ธต๊ด€๊ณ„

์ „์—ญ ์„ธ์…˜๊ณผ ํด๋ผ์ด์–ธํŠธ๋ณ„ ๋ณ„๋„ ์„ธ์…˜์„ ๋‚˜๋ˆ„์–ด์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
SSO Session์€ ์ „์—ญ ์„ค์ •์œผ๋กœ SSO Session์ด ๋งŒ๋ฃŒ๋˜๋ฉด ๋ชจ๋“  Client Session๋„ ์ž๋™์œผ๋กœ ์ข…๋ฃŒ๋œ๋‹ค.
ClientSession์€ ์ข…๋ฃŒ๋˜๋”๋ผ๋„ SSO Session๊ณผ ๋‹ค๋ฅธ Client Session์€ ์œ ์ง€ ๋œ๋‹ค.

 

  • SSO Session (์ƒ์œ„ ๋ ˆ๋ฒจ)
    • ์‚ฌ์šฉ์ž์˜ ์ „์ฒด ์ธ์ฆ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์„ธ์…˜
    • Keycloak ์„œ๋ฒ„์—์„œ ๊ด€๋ฆฌ๋˜๋Š” ์ค‘์•™ ์ง‘์ค‘์‹ ์„ธ์…˜
    • ์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ์— ๊ฑธ์ณ ๊ณต์œ ๋จ
  • Client Session (ํ•˜์œ„ ๋ ˆ๋ฒจ)
    • ํŠน์ • ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ์„ธ์…˜
    • SSO Session์— ์ข…์†๋จ
    • ๊ฐ ํด๋ผ์ด์–ธํŠธ๋ณ„๋กœ ๋ณ„๋„ ์ƒ์„ฑ๋จ

 

์˜ˆ๋ฅผ๋“ค์–ด Keycloak์— ๋กœ๊ทธ์ธํ•œ ํ›„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(A, B, C)์— ๋กœ๊ทธ์ธํ•˜๋ฉด
ํ•˜๋‚˜์˜ SSO Session๊ณผ ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ์„ธ ๊ฐœ์˜ Client Session์ด ์ƒ์„ฑ๋œ๋‹ค.
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ A์—์„œ ๋กœ๊ทธ์•„์›ƒํ•ด๋„ SSO Session์€ ์œ ์ง€๋˜๋ฉฐ, B์™€ C์—๋Š” ์—ฌ์ „ํžˆ ๋กœ๊ทธ์ธ๋œ ์ƒํƒœ์ด๋‹ค.
SSO Session์ด ํƒ€์ž„์•„์›ƒ๋˜๊ฑฐ๋‚˜ ๋ช…์‹œ์ ์œผ๋กœ ์ข…๋ฃŒ๋˜๋ฉด ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(A, B, C)์—์„œ ๋กœ๊ทธ์•„์›ƒ๋˜๋Š” ๊ฒƒ ์ด๋‹ค.

 

 

์„ธ์…˜ ํ™•์ธ ๋ฐ ์ข…๋ฃŒํ•˜๊ธฐ

ํ…Œ์ŠคํŠธ ์‚ฌ์šฉ์ž๋กœ ๋กœ๊ทธ์ธ(http://localhost:8082/realms/my-LDAP/account/) ํ›„ ํ™•์ธํ•ด๋ณด์ž.

๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€์—์„œ Sessionํƒญ์„ ํ™•์ธํ•˜๋ฉด Realm๋‚ด ์„ธ์…˜ ์ •๋ณด๋ฅผ ๋ชจ๋‘ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

Actions ์—์„œ Revocation, Sign out all active sessions๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Sign out all active sessions (๋ชจ๋“  ํ™œ์„ฑ ์„ธ์…˜ ๋กœ๊ทธ์•„์›ƒ):
    • ๋ชจ๋“  ํ™œ์„ฑ ์„ธ์…˜์„ ๋กœ๊ทธ์•„์›ƒ ์ฒ˜๋ฆฌํ•จ
    • ๋ชจ๋“  ๋””๋ฐ”์ด์Šค์™€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋กœ๊ทธ์•„์›ƒ๋˜๋ฉฐ, ์‚ฌ์šฉ์ž๋Š” ๋‹ค์‹œ ๋กœ๊ทธ์ธํ•˜๋ฉด ์ƒˆ ์„ธ์…˜์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Œ
  • Revocation (์„ธ์…˜ ํ•ด์ง€/ ๋” ๊ฐ•๋ ฅํ•œ ์ œ์–ด):
    • ์„ธ์…˜๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ด€๋ จ๋œ ํ† ํฐ๋„ ํ•ด์ง€(๋ฌดํšจํ™”)ํ•จ
    • ๋” ๊ฐ•๋ ฅํ•œ ์กฐ์น˜๋กœ, ์ด๋ฏธ ๋ฐœ๊ธ‰๋œ ํ† ํฐ(๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ ํฌํ•จ)์„ ๋ฌดํšจํ™”ํ•จ
    • ์˜คํ”„๋ผ์ธ ํ† ํฐ๊ณผ ๊ฐ™์€ ์žฅ๊ธฐ ํ† ํฐ๋„ ํ•ด์ง€ํ•  ์ˆ˜ ์žˆ์Œ
    • ์•…์˜์ ์ธ ์ ‘๊ทผ์ด ์˜์‹ฌ๋  ๋•Œ ์œ ์šฉํ•œ ๋ณด์•ˆ ์กฐ์น˜

 

Clients > Sessionsํƒญ์—์„œ Client๋ณ„ ์„ธ์…˜๋„ ๋ณ„๋„๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

Clients Session ๋ชฉ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ , Actions์—์„œ Clients Session์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Users > Sessionํƒญ์—์„œ ์‚ฌ์šฉ์ž๋ณ„ ์„ธ์…˜์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

Actions๋ฅผ ๋ณด๋ฉด Impersonate, Delete๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ  Impersonate์ด ์ข€ ํŠน์ดํ•˜๋‹ค.

  • Impersonate (๊ฐ€์žฅํ•˜๊ธฐ):
    • ๊ด€๋ฆฌ์ž๊ฐ€ ํ•ด๋‹น ์‚ฌ์šฉ์ž๋กœ ๊ฐ€์žฅํ•˜์—ฌ ์‹œ์Šคํ…œ์„ ์ฒดํ—˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ
    • ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒฝํ—˜ํ•˜๋Š” ํ™”๋ฉด์ด๋‚˜ ๊ถŒํ•œ์„ ๊ทธ๋Œ€๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด ๋ฌธ์ œ ํ•ด๊ฒฐ์ด๋‚˜ ํ…Œ์ŠคํŠธ์— ์œ ์šฉ
    • ๊ด€๋ฆฌ์ž๋Š” ์‚ฌ์šฉ์ž์˜ ๋™์˜ ์—†์ด ํ•ด๋‹น ๊ณ„์ •์œผ๋กœ ํ™œ๋™ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ณด์•ˆ์ƒ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•จ

 

HTTP ์ฟ ํ‚ค์™€ ์„ธ์…˜ 

HTTP๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฌด์ƒํƒœ(stateless) ํ”„๋กœํ† ์ฝœ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ ์š”์ฒญ์€ ๋…๋ฆฝ์ ์ด๋ฉฐ ์ด์ „ ์š”์ฒญ๊ณผ์˜ ์—ฐ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š”๋‹ค.
Stateless ํ”„๋กœํ† ์ฝœ์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ๋กœ๊ทธ์ธ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์„ธ์…˜ ๊ธฐ๋ฐ˜์˜ ์ธ์ฆ ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„(์‚ฌ์šฉ์ž์˜ ๋กœ๊ทธ์ธ ์ƒํƒœ๋ฅผ ์œ ์ง€) ํ•˜๊ธฐ ์œ„ํ•ด ์ฟ ํ‚ค๋ฅผ ํ™œ์šฉํ•œ๋‹ค.

  • ์„ธ์…˜ (Session): Keycloak์—์„œ ์„ธ์…˜์€ ์„œ๋ฒ„ ์ธก์— ์ €์žฅ๋˜๋Š” ์‚ฌ์šฉ์ž์˜ ์ธ์ฆ ์ƒํƒœ
    • AUTH_SESSION_ID: ์ธ์ฆ ํ”„๋กœ์„ธ์Šค ์ค‘์ธ ์„ธ์…˜์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๋กœ๊ทธ์ธ ์ง„ํ–‰ ์ค‘์ผ ๋•Œ ์‚ฌ์šฉ๋จ
    • KEYCLOAK_IDENTITY: ์‚ฌ์šฉ์ž์˜ ์‹ ์› ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” ์„ธ์…˜ ๋ฐ์ดํ„ฐ
    • KEYCLOAK_SESSION: ์‚ฌ์šฉ์ž์˜ ๋กœ๊ทธ์ธ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋ฉ”์ธ ์„ธ์…˜ ์‹๋ณ„์ž
    • ์ด๋Ÿฌํ•œ ์„ธ์…˜ ์ •๋ณด๋Š” Keycloak ์„œ๋ฒ„์˜ ์บ์‹œ(์ผ๋ฐ˜์ ์œผ๋กœ Infinispan)์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
  • ์ฟ ํ‚ค (Cookies): ์ฟ ํ‚ค๋Š” ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €) ์ธก์— ์ €์žฅ๋˜๋Š” ์ •๋ณด๋กœ, ์„ธ์…˜๊ณผ ์—ฐ๊ฒฐํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
    • ๋ธŒ๋ผ์šฐ์ €๋Š” Keycloak ์„œ๋ฒ„์—์„œ ๋ฐ›์€ ์ฟ ํ‚ค๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
    • ์ฟ ํ‚ค์—๋Š” ์„ธ์…˜ ID๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์–ด์„œ ์„œ๋ฒ„๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์„ธ์…˜์„ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ด๋ฏธ์ง€์—์„œ ๋ณด์ด๋Š” ์ฟ ํ‚ค๋“ค(AUTH_SESSION_ID, KEYCLOAK_IDENTITY, KEYCLOAK_SESSION)์€ ์„œ๋ฒ„์˜ ํ•ด๋‹น ์„ธ์…˜์„ ์ฐธ์กฐํ•œ๋‹ค.

์ธ์ฆ ๊ณผ์ •์—์„œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ์„ ์‹œ๋„ํ•˜๋ฉด AUTH_SESSION_ID ์ฟ ํ‚ค๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , ์ธ์ฆ์ด ์™„๋ฃŒ๋˜๋ฉด KEYCLOAK_SESSION๊ณผ KEYCLOAK_IDENTITY ์ฟ ํ‚ค๊ฐ€ ์„ค์ •๋œ๋‹ค.

์„ธ์…˜ ์œ ์ง€๋ฅผ ์œ„ํ•ด์„œ ๋ธŒ๋ผ์šฐ์ €๋Š” ์š”์ฒญ๋งˆ๋‹ค ์ฟ ํ‚ค๋ฅผ Keycloak ์„œ๋ฒ„์— ๋ณด๋‚ด๊ณ , ์„œ๋ฒ„๋Š” ์ฟ ํ‚ค์˜ ์„ธ์…˜ID๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ €์žฅ๋œ ์„ธ์…˜ ์ •๋ณด๋ฅผ ์กฐํšŒํ•œ๋‹ค. ์ด๋•Œ, ์„ธ์…˜์ด ์œ ํšจํ•˜๋ฉด ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ๋งŒ๋ฃŒ๋˜๋ฉด ์žฌ์ธ์ฆ์„ ์š”๊ตฌํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ HttpOnly ํ”Œ๋ž˜๊ทธ๋ฅผ ํ†ตํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•œ ์ ‘๊ทผ์„ ๋ฐฉ์ง€ํ•˜๊ณ ,
Secure ํ”Œ๋ž˜๊ทธ๋ฅผ ํ†ตํ•ด HTTPS ์—ฐ๊ฒฐ์—์„œ๋งŒ ์ฟ ํ‚ค๊ฐ€ ์ „์†ก๋˜๋„๋ก ํ•œ๋‹ค.

 

 

3๏ธโƒฃ ํ† ํฐ 

 

ํ† ํฐ ๊ฐœ์š”

ํ† ํฐ๊ณผ ์„ธ์…˜์˜ ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ์‚ดํŽด๋ณด์ž๋ฉด, 
์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ์œผ๋กœ ์‚ฌ์šฉ์ž์ธ์ฆ์ด ์™„๋ฃŒ๋˜๋ฉด ํ† ํฐ๋ฐœ๊ธ‰๊ณผ ๋™์‹œ์— ์„ธ์…˜์ด ์ƒ์„ฑ๋˜๋ฉฐ, ์‚ฌ์šฉ์ž(=๋ธŒ๋ผ์šฐ์ €)์— ํ† ํฐ๊ณผ ์ฟ ํ‚ค(=์„ธ์…˜)๊ฐ’์ด ์ „๋‹ฌ๋œ๋‹ค.
์„ธ์…˜์ด ๋ฌดํšจํ™”๋˜๋ฉด ํ•ด๋‹น ์„ธ์…˜์œผ๋กœ ๋ฐœ๊ธ‰๋œ ํ† ํฐ๋„ ๊ฒ€์ฆ ์‹œ ๋ฌดํšจํ™”๋  ์ˆ˜ ์žˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ํ† ํฐ์€ ์œ ํšจ์‹œ๊ฐ„์„ ์€ ์งง๊ฒŒ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ๋ณด์•ˆ์— ์œ ๋ฆฌํ•˜๋‹ค. AccessToken์˜ ๊ฒฝ์šฐ ๋ณดํ†ต 5-15๋ถ„ ์ •๋„๋กœ ์„ค์ •ํ•œ๋‹ค.
๊ทธ ์ด์œ ๋Š” ์งง์€ ์ˆ˜๋ช…์€ ํ† ํฐ์ด ํƒˆ์ทจ๋˜๋”๋ผ๋„ ์•…์šฉ ๊ฐ€๋Šฅํ•œ ์‹œ๊ฐ„์„ ์ œํ•œํ•˜๋ฉฐ, Refresh Token์„ ํ†ตํ•ด ์ƒˆ๋กœ์šด Access Token์„ ์–ป์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์— ํฐ ์˜ํ–ฅ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํ† ํฐ ์œ ํšจ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ์งง์œผ๋ฉด ์„œ๋ฒ„ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๊ณ , ๋„ˆ๋ฌด ๊ธธ๋ฉด ํƒˆ์ทจ ์œ„ํ—˜์ด ์กด์žฌํ•˜๋‹ˆ ์ผ๋ฐ˜์ ์ธ ๊ถŒ์žฅ์‚ฌํ•ญ์„ ๊ธฐ์ค€์œผ๋กœ ์„ค์ •ํ•˜๊ณ ,
ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์ปค์Šคํ…€ ํ•˜๋Š”๊ฒƒ์ด ์ข‹๋‹ค.

 

ํ† ํฐ ์ข…๋ฅ˜

Keycloak์—์„œ์˜ ํ† ํฐ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ(์ธ์ฆ)์— ์„ฑ๊ณตํ•œ ํ›„ ๋ฐœ๊ธ‰๋ฐ›๋Š” ์ธ์ฆ/์ธ๊ฐ€ ํ‹ฐ์ผ“์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.
์˜ˆ๋ฅผ๋“ค์–ด ๋†€์ด๊ณต์›์— ์–ธ์ œ ์ž…์žฅ ๊ฐ€๋Šฅํ•œ์ง€, ์–ด๋–ค ๋†€์ด๊ธฐ๊ตฌ๋ฅผ ํƒˆ ์ˆ˜ ์žˆ๋Š”์ง€ ๋“ฑ์ด ์ ์ธ ํ‹ฐ์ผ“์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค.

ํ† ํฐ์€ OAuth 2.0๊ณผ OpenID Connect(OIDC) ํ”„๋กœํ† ์ฝœ์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ, ์•„๋ž˜์™€ ๊ฐ™์€ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

๊ตฌ๋ถ„ ID Token Access Token Refresh Token
๋ชฉ์  ์‚ฌ์šฉ์ž์˜ ์‹ ์›(identity) ์ฆ๋ช…
์‚ฌ์šฉ์ž๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ์ฆ๋ช…ํ•˜๋Š” ํ† ํฐ
OpenID Connect ํ”„๋กœํ† ์ฝœ์˜ ํ•ต์‹ฌ ์š”์†Œ
์ž์›์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ ์ฆ๋ช…
ํŠน์ • ๋ฆฌ์†Œ์Šค๋‚˜ API์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋‚˜ํƒ€๋ƒ„
OAuth 2.0 ํ”„๋กœํ† ์ฝœ์˜ ํ•ต์‹ฌ ์š”์†Œ
์ƒˆ๋กœ์šด ์•ก์„ธ์Šค ํ† ํฐ์„ ์–ป๊ธฐ ์œ„ํ•œ ํ† ํฐ
์•ก์„ธ์Šค ํ† ํฐ์ด ๋งŒ๋ฃŒ๋˜์—ˆ์„ ๋•Œ ์ƒˆ ํ† ํฐ์„ ๋ฐœ๊ธ‰๋ฐ›๋Š” ์šฉ๋„
์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค์‹œ ๋กœ๊ทธ์ธํ•  ํ•„์š” ์—†์ด ์ธ์ฆ ์ƒํƒœ๋ฅผ ์œ ์ง€
ํฌํ•จ ์ •๋ณด ์‚ฌ์šฉ์ž ID, ์ด๋ฆ„,
์ด๋ฉ”์ผ ๋“ฑ ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ์ •๋ณด,

ํ† ํฐ ๋ฐœ๊ธ‰์ž, ๋Œ€์ƒ ํด๋ผ์ด์–ธํŠธ,
๋งŒ๋ฃŒ ์‹œ๊ฐ„
์‚ฌ์šฉ์ž ๊ถŒํ•œ(roles, scopes)
ํ† ํฐ ๋ฐœ๊ธ‰์ž, ๋Œ€์ƒ ์„œ๋น„์Šค, ๋งŒ๋ฃŒ ์‹œ๊ฐ„
๋ณดํ†ต ์‚ฌ์šฉ์ž ์‹๋ณ„ ์ •๋ณด์™€ ๋ฒ”์œ„(scope) ์ •๋ณด
ํ† ํฐ ๋ฐœ๊ธ‰์ž, ๋Œ€์ƒ ํด๋ผ์ด์–ธํŠธ, ๋งŒ๋ฃŒ ์‹œ๊ฐ„
์šฉ๋„ ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž๋ฅผ ์‹๋ณ„
์ฃผ๋กœ ์ธ์ฆ(Authentication) ๋‹จ๊ณ„์—์„œ ์‚ฌ์šฉ
๋ณดํ˜ธ๋œ API๋‚˜ ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„์— ์ ‘๊ทผํ•  ๋•Œ ์‚ฌ์šฉ
์ฃผ๋กœ ์ธ๊ฐ€(Authorization) ๋‹จ๊ณ„์—์„œ ์‚ฌ์šฉ
API ์š”์ฒญ ์‹œ Authorization ํ—ค๋”์— ํฌํ•จ๋จ
์•ก์„ธ์Šค ํ† ํฐ์˜ ์ˆ˜๋ช…์„ ์งง๊ฒŒ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๋ณด์žฅ
ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ์„ ์„œ๋ฒ„์— ์ œ์ถœํ•˜์—ฌ ์ƒˆ ์•ก์„ธ์Šค ํ† ํฐ์„ ์š”์ฒญ
์ผ๋ฐ˜์ ์œผ๋กœ ์•ก์„ธ์Šค ํ† ํฐ๋ณด๋‹ค ๊ธด ์ˆ˜๋ช…(hours, days)์ด๋‚˜, Refresh Token Rotation ์‚ฌ์šฉ ๊ฐ€๋Šฅ
ํด๋ผ์ด์–ธํŠธ์— ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅ๋˜์–ด์•ผ ํ•จ
์„œ๋ฒ„ ์ธก์—์„œ ์ทจ์†Œ ๊ฐ€๋Šฅ

ํ† ํฐ์€ ์ด์ „์— ์ •๋ฆฌํ•œ ํฌ์ŠคํŒ… [keycloak ๋ง›๋ณด๊ธฐ #2] OpenID Connection ์‚ฌ์šฉ์ž ์ธ์ฆ ์ดํ•ดํ•˜๊ธฐ ์—์„œ ๋‹ค๋ฃจ๊ณ  ์žˆ์œผ๋‹ˆ, 
์ดํ•ด ์–ด๋ ค์šด ๋ถ€๋ถ„์€ ๋ณด๊ณ  ์ดํ•ดํ•˜๊ณ  ๋‹ค์‹œ ์˜ค์ž!

 

ํ† ํฐ ์„ค์ • (Lifespan ๋“ฑ)

Keycloak Realm Settings์—์„œ Tokens ์„ค์ • ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

  • General (์ผ๋ฐ˜ ํ† ํฐ ์„ค์ •)
    • Default Signature Algorithm: ํ† ํฐ ์„œ๋ช…์— ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (RS256 ์„ค์ •)
    • OAuth 2.0 Device Code Lifespan: ์žฅ์น˜ ์ธ์ฆ ์ฝ”๋“œ์˜ ์œ ํšจ ๊ธฐ๊ฐ„ (10๋ถ„)
    • OAuth 2.0 Device Polling Interval: ์žฅ์น˜ ์ธ์ฆ ํด๋ง ๊ฐ„๊ฒฉ (5์ดˆ)
    • Short verification_uri in Device Authorization flow: ์žฅ์น˜ ์ธ์ฆ ํ๋ฆ„์—์„œ ์งง์€ ํ™•์ธ URI ์‚ฌ์šฉ
    • Lifetime of the Request URI for Pushed Authorization Request: ํ‘ธ์‹œ๋œ ์ธ๊ฐ€ ์š”์ฒญ์˜ ์š”์ฒญ URI ์ˆ˜๋ช… (1๋ถ„)
  • Refresh tokens
    • Revoke Refresh Token: ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ ์‚ฌ์šฉ ํ›„ ํ•ด์ง€ ์—ฌ๋ถ€ (๋น„ํ™œ์„ฑํ™”๋จ).
      (ํ™œ์„ฑํ™”ํ•˜๋ฉด ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ์€ ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ƒˆ ์•ก์„ธ์Šค ํ† ํฐ์„ ์–ป์„ ๋•Œ ์ƒˆ ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ์ด ๋ฐœ๊ธ‰๋จ)
  • Access tokens
    • Access Token Lifespan: ์ผ๋ฐ˜ ์•ก์„ธ์Šค ํ† ํฐ์˜ ์œ ํšจ ๊ธฐ๊ฐ„ (5๋ถ„ ๊ถŒ์žฅ)
    • Access Token Lifespan For Implicit Flow: OAuth 2.0 ์•”๋ฌต์  ํ๋ฆ„์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์•ก์„ธ์Šค ํ† ํฐ์˜ ์œ ํšจ ๊ธฐ๊ฐ„ (15๋ถ„ ์„ค์ •)
    • Client Login Timeout: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋กœ๊ทธ์ธ์„ ์™„๋ฃŒํ•ด์•ผ ํ•˜๋Š” ์ œํ•œ ์‹œ๊ฐ„ (1๋ถ„ ์„ค์ •)
  • Action tokens
    • User-Initiated Action Lifespan: ์‚ฌ์šฉ์ž๊ฐ€ ์‹œ์ž‘ํ•œ ์ž‘์—… ํ† ํฐ์˜ ์œ ํšจ ๊ธฐ๊ฐ„ (5๋ถ„)
    • Default Admin-Initiated Action Lifespan: ๊ด€๋ฆฌ์ž๊ฐ€ ์‹œ์ž‘ํ•œ ์ž‘์—… ํ† ํฐ์˜ ๊ธฐ๋ณธ ์œ ํšจ ๊ธฐ๊ฐ„ (12์‹œ๊ฐ„)
    • Email Verification: ์ด๋ฉ”์ผ ํ™•์ธ ๋งํฌ์˜ ์œ ํšจ ๊ธฐ๊ฐ„
    • IdP account email verification: ์™ธ๋ถ€ ID ์ œ๊ณต์ž ๊ณ„์ • ์ด๋ฉ”์ผ ํ™•์ธ์˜ ์œ ํšจ ๊ธฐ๊ฐ„
    • Forgot password: ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ • ๋งํฌ์˜ ์œ ํšจ ๊ธฐ๊ฐ„
    • Execute actions: ํ•„์ˆ˜ ์ž‘์—… ์‹คํ–‰ ๋งํฌ์˜ ์œ ํšจ ๊ธฐ๊ฐ„

 

ํ˜น์€ Client๋ณ„๋กœ Access Token์˜ ์œ ํšจ์‹œ๊ฐ„์„ ์ปค์Šคํ…€ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

4๏ธโƒฃ  ์„ธ์…˜, ์ฟ ํ‚ค, ํ† ํฐ Keycloak SSO ํ™˜๊ฒฝ์—์„œ์˜  ์ƒํ˜ธ์ž‘์šฉ

  • ์ดˆ๊ธฐ ์ ‘๊ทผ ๋ฐ ์ธ์ฆ:
    • ์‚ฌ์šฉ์ž๊ฐ€ A ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ‘๊ทผํ•˜๋ฉด Keycloak์œผ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ
    • ์‚ฌ์šฉ์ž ์ธ์ฆ ํ›„ Keycloak ์„œ๋ฒ„์— ์„ธ์…˜์ด ์ƒ์„ฑ๋˜๊ณ  ํ† ํฐ ๋ฐœ๊ธ‰
  • ์ฟ ํ‚ค ์„ค์ • ๋ฐ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ:
    • Keycloak์€ ๋ธŒ๋ผ์šฐ์ €์— ์„ธ์…˜ ์ฟ ํ‚ค๋ฅผ ์„ค์ •ํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ
    • ํ† ํฐ(ID Token, Access Token, Refresh Token)์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ „๋‹ฌ
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ ‘๊ทผ:
    • A ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํ† ํฐ์„ ๊ฒ€์ฆํ•˜๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณต
  • ๋‹ค๋ฅธ ์•ฑ SSO ์ ‘๊ทผ:
    • ์‚ฌ์šฉ์ž๊ฐ€ B ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ‘๊ทผํ•˜๋ฉด Keycloak์€ ์ฟ ํ‚ค๋ฅผ ํ†ตํ•ด ๊ธฐ์กด ์„ธ์…˜ ํ™•์ธ
    • ์žฌ์ธ์ฆ ์—†์ด B ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์šฉ ํ† ํฐ์ด ๋ฐœ๊ธ‰๋˜์–ด SSO ๊ตฌํ˜„
  • ํ† ํฐ ๊ฐฑ์‹ :
    • Access Token์ด ๋งŒ๋ฃŒ๋˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Refresh Token์„ ์‚ฌ์šฉํ•ด ์ƒˆ ํ† ํฐ์„ ์š”์ฒญ
  • ์„ธ์…˜ ์ข…๋ฃŒ:
    • ๋กœ๊ทธ์•„์›ƒ ์‹œ Keycloak์€ ์„ธ์…˜์„ ์ข…๋ฃŒํ•˜๊ณ  ๋ชจ๋“  SSO ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์•Œ๋ฆผ

 

 

728x90