์ธ์ฆ ์ด ์ •๋ฆฌ :: 3. SSO ์ธ์ฆ ๋ฐ ์ด ์ •๋ฆฌ

SSO

SSO(Single Sign On)๋Š” ํ•œ ๋ฒˆ์˜ ๋กœ๊ทธ์ธ์œผ๋กœ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํ†ตํ•ฉ ์ธ์ฆ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์„œ๋น„์Šค์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ ๋•Œ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ฉ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด SSO๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

SSO๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‘ ๊ฐ€์ง€ ํŒจํ„ด์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

1. ์ธ์ฆ gateway ๋ฐฉ์‹

๊ฐ ์„œ๋น„์Šค์— ์ ‘๊ทผํ•  ๋•Œ ์ด์ „ ๋ ˆ์ด์–ด์— ํ†ตํ•ฉ ์ธ์ฆ ์„œ๋น„์Šค๊ฐ€ ์กด์žฌํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. User๋Š” SessionID๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ํ†ตํ•ฉ ์ธ์ฆ ์„œ๋น„์Šค๋ฅผ ํ†ต๊ณผํ•˜๋ฉด ํ•ด๋‹น ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์˜ ๋‹จ์ ์€ ๊ฐ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•  ๋•Œ๋งˆ๋‹ค ์ธ์ฆ ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผ ํ•˜๋ฉฐ ์ธ์ฆ ์„œ๋น„์Šค ์ž์ฒด๊ฐ€ bottle neck์ด ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

2. ์ธ์ฆ ํ† ํฐ ๋ฐœ๊ธ‰ ๋ฐฉ์‹

์œ ์ €๋Š” ์šฐ์„  ํ†ตํ•ฉ ์ธ์ฆ ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด ํ† ํฐ์ด๋ผ๋Š” ์ธ์ฆ ๋Œ€ํ–‰ ๋งค์ฒด๋ฅผ ๋ถ€์—ฌ๋ฐ›๊ณ , ์œ ์ €๊ฐ€ ์„œ๋น„์Šค๋ฅผ ์š”์ฒญํ•˜๋ฉด ๊ฐ ์„œ๋น„์Šค๋Š” ์œ ์ €๊ฐ€ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋˜ ํ† ํฐ์œผ๋กœ ์ธ์ฆ ์—ฌ๋ถ€๋ฅผ ํŒŒ์•…ํ•ฉ๋‹ˆ๋‹ค. ํ† ํฐ์€ ๋ณดํ†ต ํ•ด์‹œํ•จ์ˆ˜์— ์˜ํ•ด ๋ณ€ํ™˜๋˜์–ด ์œ ์ €์˜ ๋ธŒ๋ผ์šฐ์ €์— ์ฟ ํ‚ค์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

 

 

์ด ์ •๋ฆฌ

์ธ์ฆ ์ข…๋ฅ˜ ์ธ์ฆ ์žฌ์ธ์ฆ ์ธ์ฆ๊ฐฑ์‹  ๋น„๊ณ 
SAML SAMLResponse Session Cookie - XML๊ธฐ๋ฐ˜์ด๋ผ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.
OAuth 2.0 1. API key(Client id, Client secret, redirect URL) - Client ์ธ์ฆ id, pw - User ์ธ์ฆ
2. Authorization code
3. access token
access token refresh token ๋‹ค๋ฅธ ์„œ๋น„์Šค์˜ Auth๋ฅผ ์ด์šฉํ•ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
OpenIDC id, pw - User ์ธ์ฆ
API key - Client ์ธ์ฆ
access token refresh token ์ธ๊ฐ€๋Š” id token์„ ํ†ตํ•ด์„œ ์ด๋ฃจ์–ด์ง„๋‹ค.

 

๊ฒฐ๋ก 

๊ฒฐ๋ก ์€ OpenIDC ๋ฐฉ์‹์— Client ์ธ์ฆ์„ ๋”ํ•˜๊ธฐ ์œ„ํ•ด API key ๋ฐฉ์‹์„ ๋„์ž…ํ•˜๋ฉด ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ๋ฅผ ์ปค๋ฒ„ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ, ์ด๋Ÿฌํ•œ ์ธ์ฆ flow๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ refresh token์€ BFF ์„œ๋ฒ„์—์„œ ์ธ๋ฑ์Šค DB์™€ ์†Œํ†ตํ•˜๋„๋ก ํ•˜๋ฉฐ key๊ฐ€ ๋˜๋Š” ์ธ๋ฑ์Šค๋ฅผ Client๋กœ ๋‚ด๋ ค์ฃผ๋Š” ๊ฒƒ์ด ๋ณด์•ˆ์— ์ข‹๋‹ค.

 

์ฐธ๊ณ 

https://cloud.google.com/endpoints/docs/openapi/when-why-api-key?hl=ko

https://gruuuuu.github.io/security/ssofriends/

https://wiki.dailyhou.se/display/OHP/Auth+Service+Tech+Design

https://dleroari.medium.com/learn-the-basics-of-json-web-tokens-jwt-and-how-it-works-in-practice-8b3b14cbe0f9

๋ฐ˜์‘ํ˜•