ํ†ตํ•ฉ ์ธ์ฆ์„ ์œ„ํ•œ IAM ์˜คํ”ˆ์†Œ์Šค์ธ ํ‚คํด๋ก(Keycloak)์—์„œ ์นด์นด์˜ค ์†Œ์…œ ํ”„๋กœ๋ฐ”์ด๋”๋ฅผ IdP(Identity Provider)๋กœ ๋ ๋ฆ„(Realm)์— ์ถ”๊ฐ€ํ•˜๊ณ  ์นด์นด์˜ค ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•˜์—ฌ ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•ด๋ณด๋„๋ก ํ•˜์ž. ์šฐ์„  ์นด์นด์˜ค ์†Œ์…œ ํ”„๋กœ๋ฐ”์ด๋”๋Š” OpenID Connect ๊ทœ๊ฒฉ์„ ์ง€์›ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ํ‚คํด๋ก์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•ด์ฃผ๊ณ  ์žˆ๋Š”OpenID Connect v1.0 ํ”„๋กœ๋ฐ”์ด๋” ๋ฐฉ์‹์œผ๋กœ ์ถ”๊ฐ€ํ•˜์—ฌ ๋กœ๊ทธ์ธ ํ™”๋ฉด์— ์„ ํƒ ์˜ต์…˜์œผ๋กœ ๋…ธ์ถœ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ ์œ„ํ•œ REST API ํ‚ค์™€ ํด๋ผ์ด์–ธํŠธ ์‹œํฌ๋ฆฟ

์šฐ์„ , ์นด์นด์˜ค ๋””ํŽ ๋กœํผ์Šค์— ์นด์นด์˜ค ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•œ ํ›„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค๊ณ  ์นด์นด์˜ค ๋กœ๊ทธ์ธ์— ๋Œ€ํ•œ ์„ค์ •์„ ์ง„ํ–‰ํ•˜์ž. ํ‚คํด๋ก์—์„œ OpenID Connect Provider ์„ค์ •์— ์ž…๋ ฅํ•  ํด๋ผ์ด์–ธํŠธ ์•„์ด๋””์™€ ํด๋ผ์ด์–ธํŠธ ์‹œํฌ๋ฆฟ ์ •๋ณด๋ฅผ ๋‹ค์Œ์˜ ๋ฉ”๋‰ด์—์„œ ํ™•์ธํ•˜๋„๋ก ํ•˜์ž. ํด๋ผ์ด์–ธํŠธ ์‹œํฌ๋ฆฟ์€ ์ฝ”๋“œ ๊ตํ™˜ ๊ณผ์ •์—์„œ๋Š” ๋…ธ์ถœ๋˜์ง€ ์•Š์œผ๋ฉฐ ์‚ฌ์šฉ์ž ์ธ์ฆ ํ›„ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ID ํ† ํฐ์„ ๋ฐœ๊ธ‰๋ฐ›๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋œ๋‹ค.

  • Client ID : ๋‚ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ โ†’ ์•ฑ ์„ค์ • โ†’ ์•ฑ ํ‚ค (REST API ํ‚ค)
  • Client Secret : ๋‚ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ โ†’ ์ œํ’ˆ ์„ค์ • โ†’ ์นด์นด์˜ค ๋กœ๊ทธ์ธ โ†’ ๋ณด์•ˆ (Client Secret)

ํ‚คํด๋ก์— ์นด์นด์˜ค OpenID Connect Provider ์ถ”๊ฐ€

Identity Providers ๋ชฉ๋ก์—์„œOpenID Connect v1.0์„ ์„ ํƒํ•˜๊ณ Discovery endpoint ์— ์นด์นด์˜ค ๋กœ๊ทธ์ธ์˜ OpenID Connect Discovery Metadata ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜๊ฒŒ ๋˜๋ฉด ํ‚คํด๋ก์—์„œ๋Š” OpenID Connect ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ์ž๋™์œผ๋กœ ์ž…๋ ฅํ•ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์•ž์„œ ์นด์นด์˜ค ๋””ํŽ ๋กœํผ์Šค์—์„œ ํ™•์ธํ•ด๋‘์—ˆ๋˜ REST API ํ‚ค์™€ ํด๋ผ์ด์–ธํŠธ ์‹œํฌ๋ฆฟ์„ ์ž…๋ ฅํ•˜๋„๋ก ํ•˜์ž.

  • Client ID : ๋‚ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ โ†’ ์•ฑ ์„ค์ • โ†’ ์•ฑ ํ‚ค (REST API ํ‚ค)
  • Client Secret : ๋‚ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ โ†’ ์ œํ’ˆ ์„ค์ • โ†’ ์นด์นด์˜ค ๋กœ๊ทธ์ธ โ†’ ๋ณด์•ˆ (Client Secret)
  • Client assertion signature algorithm : RS256 (Optinal)

์นด์นด์˜ค์—์„œ๋Š” ์„œ๋ช… ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ RS256 ํ•œ๊ฐ€์ง€๋ฅผ ์ง€์›ํ•˜๋ฏ€๋กœ ๊ตณ์ด ์„ ํƒํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์นด์นด์˜ค ๋กœ๊ทธ์ธ OpenID Connect ํ™œ์„ฑํ™” ์„ค์ • ๋ฐ Redirect URI ์ถ”๊ฐ€

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ œํ’ˆ ์„ค์ •์—์„œ ์นด์นด์˜ค ๋กœ๊ทธ์ธ๊ณผ OpenID Connect ์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•˜๊ณ  ํ‚คํด๋ก์— ์ถ”๊ฐ€ํ•œ IdP ๋ธŒ๋กœ์ปค์— ํ‘œ์‹œ๋˜๋Š”Redirect URI ์ฃผ์†Œ๋ฅผ ์นด์นด์˜ค ๋กœ๊ทธ์ธ์˜ Redirect URI ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.

์ฝ”๋“œ ๊ตํ™˜ ๊ณผ์ •์—์„œ PKCE ์‚ฌ์šฉํ•˜๊ธฐ

์นด์นด์˜ค ์†Œ์…œ ํ”„๋กœ๋ฐ”์ด๋”๋Š”S256 ๋ฐฉ์‹์˜ PKCE๋ฅผ ์ง€์›ํ•˜๋ฏ€๋กœ ์ฝ”๋“œ ๊ตํ™˜ ๊ณผ์ •(Authorization Code Flow)์—์„œ PKCE๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์‚ฌ์šฉ์ž ์ฝ˜์†” ๋กœ๊ทธ์ธ ํ™”๋ฉด์—์„œ ์นด์นด์˜ค ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ

์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ ์œ„ํ•œ IdP๋ฅผ ์ถ”๊ฐ€ํ–ˆ์œผ๋ฏ€๋กœ์‚ฌ์šฉ์ž ์ฝ˜์†”(account-console)์˜ ๋กœ๊ทธ์ธ ํ™”๋ฉด์— ์นด์นด์˜ค ํ”„๋กœ๋ฐ”์ด๋”๊ฐ€ ์˜ต์…˜์œผ๋กœ ํ‘œ์‹œ๋œ๋‹ค. ์‚ฌ์šฉ์ž ์ฝ˜์†”์˜ ๋กœ๊ทธ์ธ ํ™”๋ฉด์—์„œ ์นด์นด์˜ค ํ”„๋กœ๋ฐ”์ด๋” ์ด๋ฆ„์„ ์„ ํƒํ•˜๋ฉด ์นด์นด์˜ค ๊ณ„์ • ๋กœ๊ทธ์ธ ํ™”๋ฉด์œผ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ๋˜๋ฉฐ ์นด์นด์˜ค ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•˜๊ณ  ๋™์˜ ํ•ญ๋ชฉ์— ๋”ฐ๋ผ ์ง„ํ–‰ํ•˜๋ฉด ํ‚คํด๋ก ์‚ฌ์šฉ์ž๋กœ ์ถ”๊ฐ€๋œ๋‹ค. ๋งŒ์•ฝ, ์•„๋ž˜์™€ ๊ฐ™์ด์นด์นด์˜ค ๊ณ„์ •(์ด๋ฉ”์ผ)์— ๋Œ€ํ•œ ์ˆ˜์ง‘ ํ•ญ๋ชฉ์— ๋™์˜ํ–ˆ๋‹ค๋ฉด ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ์ด๋ฉ”์ผ์ด ๋ชจ๋‘ ์ด๋ฉ”์ผ๋กœ ์„ค์ •๋˜๋ฉฐ ์‚ฌ์šฉ์ž ์ •๋ณด ์ž…๋ ฅ ๋‹จ๊ณ„์—†์ด ์‚ฌ์šฉ์ž๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ณ  ์‚ฌ์šฉ์ž ์ฝ˜์†” ํ™”๋ฉด์ด ๋ณด์ธ๋‹ค.

Add Identity Provider Mapper

์นด์นด์˜ค ID ํ† ํฐ ํŽ˜์ด๋กœ๋“œ์—๋Š” ์ˆ˜์ง‘ ๋™์˜ ํ•ญ๋ชฉ์— ๋”ฐ๋ผ ํด๋ ˆ์ž„์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š”๋ฐ ์ด๊ฒƒ์„User Attribute ์— ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Mapper ์„ค์ •์ด ํ•„์š”ํ•˜๋‹ค.

  • username : sub
  • nickname : nickname
  • email : email (๊ธฐ๋ณธ๊ฐ’)

์œ„์™€ ๊ฐ™์ด username ์— ๋Œ€ํ•œ Mapper ์„ค์ •์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ด๋ฉ”์ผ ์ •๋ณด๊ฐ€ username ์œผ๋กœ ์„ค์ •๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ, username ์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ•ญ๋ชฉ์„ ์—ฐ๊ฒฐํ•œ๋‹ค๋ฉด ๊ด€๋ฆฌ์ž ์ฝ˜์†”์—์„œ ์ƒ์„ธ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•ด์งˆ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์นด์นด์˜ค ๊ณ„์ •์œผ๋กœ ์ถ”๊ฐ€๋œ ์‚ฌ์šฉ์ž ์ •๋ณด