๋ช ๋ฌ ์ ์ ์ ๋ ์๋ฐฑ ๊ฐ์ ๋ด๋ถ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด OpenID Connect ์๋ฒ๋ฅผ ๊ตฌํํ๊ณ ์์์ต๋๋ค. ์์ฒด ๊ฐ๋ฐ์์ ๋ ์์ ๊ท๋ชจ๋ก ํธ๋ฆฌํ๊ฒ ์ผ๋ฐ์ ์ผ๋ก ํ์ฉ๋๋ ํ์ค์ผ๋ก ์ด๋ํ์ต๋๋ค. ์ค์ ์๋น์ค๋ฅผ ํตํ ์ก์ธ์ค๋ ๋จ์กฐ๋ก์ด ์์ ์ ํฌ๊ฒ ๋จ์ํํ๊ณ ์ธ์ฆ ๊ตฌํ ๋น์ฉ์ ์ค์ด๋ฉฐ ์๋ก์ด ์๋ฃจ์ ์ ๊ฐ๋ฐํ ๋ ๋จธ๋ฆฌ๋ฅผ ์์ด์ง ์๊ณ ๋ง์ ๊ธฐ์ฑ ์๋ฃจ์ ์ ์ฐพ์ ์ ์์ต๋๋ค. ์ด ๊ธฐ์ฌ์์๋ ์ด๋ฌํ ์ ํ๊ณผ ์ฐ๋ฆฌ๊ฐ ์ฑ์ธ ์ ์์๋ ๋ฒํ์ ๋ํด ์ด์ผ๊ธฐํ ๊ฒ์ ๋๋ค.
์ค๋ ์ ์... ๋ชจ๋ ๊ฒ์ด ์ด๋ป๊ฒ ์์๋์๋์ง
๋ช ๋ ์ ์๋ ์ ์ด๋ฅผ ์ํ ๋ด๋ถ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋๋ฌด ๋ง์์ ๋ ํ์ฌ ๋ด์์ ์ก์ธ์ค๋ฅผ ์ ์ดํ๋ โโ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ์ต๋๋ค. ๋ค์ํ ๊ธฐ๋ฅ์ ๋ํ ์ก์ธ์ค๊ฐ ๊ตฌ์ฑ๋ ์ง์ ์ ๋ณด๊ฐ ํฌํจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ๋ ๊ฐ๋จํ Rails ์ ํ๋ฆฌ์ผ์ด์ ์ด์์ต๋๋ค. ๋์์ ์ฐ๋ฆฌ๋ ํด๋ผ์ด์ธํธ ์ธก๊ณผ ์ธ์ฆ ์๋ฒ ์ธก์ ํ ํฐ ๊ฒ์ฆ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์ฒซ ๋ฒ์งธ SSO๋ฅผ ์ ๊ธฐํ์ผ๋ฉฐ, ํ ํฐ์ ์ฌ๋ฌ ๋งค๊ฐ๋ณ์์ ํจ๊ป ์ํธํ๋ ํํ๋ก ์ ์ก๋๊ณ ์ธ์ฆ ์๋ฒ์์ ๊ฒ์ฆ๋์์ต๋๋ค. ๊ฐ ๋ด๋ถ ์์ฉ ํ๋ก๊ทธ๋จ์ด ์๋นํ ์์ค์ ๋ ผ๋ฆฌ๋ฅผ ์ค๋ช ํด์ผ ํ๊ณ ์ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ธ์ฆ ์๋ฒ์ ์์ ํ ๋๊ธฐํ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๊ฐ์ฅ ํธ๋ฆฌํ ์ต์ ์ด ์๋์์ต๋๋ค.
์ผ๋ง ํ ์ค์ ์ง์ค์ ์ธ์ฆ ์์ ์ ๋จ์ํํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. SSO๊ฐ ๋ฐธ๋ฐ์๋ก ์ ์ก๋์์ต๋๋ค. OpenResty์ ๋์์ผ๋ก ํ ํฐ์ ํ์ธํ๋ ํ ํ๋ฆฟ์ด Lua์ ์ถ๊ฐ๋์๊ณ , ์์ฒญ์ด ์ด๋ค ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ๊ฐ๋์ง ์๊ณ ๊ฑฐ๊ธฐ์ ์ก์ธ์ค๊ฐ ์๋์ง ํ์ธํ ์ ์์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๋ด๋ถ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์ก์ธ์ค๋ฅผ ์ ์ดํ๋ โโ์์ ์ ํฌ๊ฒ ๋จ์ํํ์ต๋๋ค. ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๋์์ ๋ ์ด์ ์ถ๊ฐ ๋ ผ๋ฆฌ๋ฅผ ์ค๋ช ํ ํ์๊ฐ ์์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฐ๋ฆฌ๋ ํธ๋ํฝ์ ์ธ๋ถ์ ์ผ๋ก ์ฐจ๋จํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์์ฒด๋ ์น์ธ์ ๋ํด ์๋ฌด๊ฒ๋ ์์ง ๋ชปํ์ต๋๋ค.
๊ทธ๋ฌ๋ ํ ๊ฐ์ง ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์์ต๋๋ค. ์ง์์ ๋ํ ์ ๋ณด๊ฐ ํ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๋ป์ต๋๊น? ์ธ์ฆ ์๋น์ค์ ๋ํ API๋ฅผ ์์ฑํ ์ ์์์ง๋ง ๊ทธ๋ฐ ๊ฒฝ์ฐ ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํด ์ถ๊ฐ ๋ก์ง์ ์ถ๊ฐํด์ผ ํ์ต๋๋ค. ๋ํ ์ฐ๋ฆฌ๋ ๋ด๋ถ ์ธ์ฆ ์๋ฒ์์ ํฅํ OpenSource๋ก ๋ณํํ๊ธฐ ์ํด ์งํฅํ๋ ์์ฒด ์์ฑ ์ ํ๋ฆฌ์ผ์ด์ ์ค ํ๋์ ๋ํ ์์กด์ฑ์ ์์ ๊ณ ์ถ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๋ํด ๋ค๋ฅธ ์๊ฐ์ ์ด์ผ๊ธฐํ ๊ฒ์ ๋๋ค. ๋ ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ ์ OAuth์์ต๋๋ค.
๊ณตํต ํ์ค์
OAuth๋ ์ดํดํ ์ ์๊ณ ์ผ๋ฐ์ ์ผ๋ก ์ธ์ ๋๋ ์ธ์ฆ ํ์ค์ด์ง๋ง ๊ธฐ๋ฅ๋ง์ผ๋ก๋ ์ถฉ๋ถํ์ง ์๊ธฐ ๋๋ฌธ์ ์ฆ์ OIDC(OpenID Connect)๋ฅผ ๊ณ ๋ คํ๊ธฐ ์์ํ์ต๋๋ค. OIDC ์์ฒด๋ ๊ฐ๋ฐฉํ ์ธ์ฆ ํ์ค์ ์ธ ๋ฒ์งธ ๊ตฌํ์ด๋ฉฐ OAuth 2.0 ํ๋กํ ์ฝ(๊ฐ๋ฐฉํ ์ธ์ฆ ํ๋กํ ์ฝ)์ ํตํด ์ถ๊ฐ ๊ธฐ๋ฅ์ผ๋ก ์ ์ ๋์์ต๋๋ค. ์ด ์๋ฃจ์ ์ ์ต์ข ์ฌ์ฉ์์ ๋ํ ๋ฐ์ดํฐ ๋ถ์กฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ธ์ฆ ๊ณต๊ธ์๋ฅผ ๋ณ๊ฒฝํ ์๋ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ํน์ ๊ณต๊ธ์๋ฅผ ์ ํํ์ง ์๊ณ ๊ธฐ์กด ์ธ์ฆ ์๋ฒ์ OIDC์์ ํตํฉ์ ์ถ๊ฐํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ์ด ๊ฒฐ์ ์ ์ ๋ฆฌํ ์ ์ OIDC๊ฐ ์ต์ข ์ฌ์ฉ์ ์ธ์ฆ ์ธก๋ฉด์์ ๋งค์ฐ ์ ์ฐํ๋ค๋ ์ ์ ๋๋ค. ๋ฐ๋ผ์ ํ์ฌ ์ธ์ฆ ์๋ฒ์์ OIDC ์ง์์ ๊ตฌํํ๋ ๊ฒ์ด ๊ฐ๋ฅํ์ต๋๋ค.
์์ฒด OIDC ์๋ฒ๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ
1) ๋ฐ์ดํฐ๋ฅผ ์ํ๋ ํํ๋ก ๊ฐ์ ธ์ด
OIDC๋ฅผ ํตํฉํ๋ ค๋ฉด ํ์ฌ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ํ์ค์์ ์ดํดํ ์ ์๋ ํํ๋ก ๊ฐ์ ธ์์ผ ํฉ๋๋ค. OIDC์์๋ ์ด๋ฅผ ํด๋ ์์ด๋ผ๊ณ ํฉ๋๋ค. ํด๋ ์์ ๋ณธ์ง์ ์ผ๋ก ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ต์ข
ํ๋(์ด๋ฆ, ์ด๋ฉ์ผ, ์ ํ ๋ฑ)์
๋๋ค. ์กด์ฌํ๋ค
ํน์ง ๊ทธ๋ฃน์ ๋ค์ ํ์ ์งํฉ์ธ ๋ฒ์๋ก ๊ฒฐํฉ๋ฉ๋๋ค. ์น์ธํ๋ ๋์ ๋ฒ์์ ์ผ๋ถ ๋ธ๋๋๊ฐ ํ์ํ์ง ์์ ๊ฒฝ์ฐ์๋ ํน์ ๋ธ๋๋๊ฐ ์๋๋ผ ๋ฒ์์ ๋ํ ์ก์ธ์ค๊ฐ ์์ฒญ๋ฉ๋๋ค.
2) ํ์ํ ๊ต๋ถ๊ธ ์ํ
OIDC ํตํฉ์ ๋ค์ ๋ถ๋ถ์ ๊ถํ ๋ถ์ฌ ์ ํ์ธ ๊ถํ ๋ถ์ฌ์ ์ ํ ๋ฐ ๊ตฌํ์ ๋๋ค. ์ ํํ ์์ฉ ํ๋ก๊ทธ๋จ๊ณผ ์ธ์ฆ ์๋ฒ ๊ฐ์ ์ถ๊ฐ ์ํธ ์์ฉ ์๋๋ฆฌ์ค๋ ์ ํํ ์น์ธ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ์ฌ๋ฐ๋ฅธ ๋ณด์กฐ๊ธ์ ์ ํํ๋ ์์์ ์ธ ์ฒด๊ณ๊ฐ ์๋ ๊ทธ๋ฆผ์ ๋์ ์์ต๋๋ค.
์ฒซ ๋ฒ์งธ ์ ์ฒญ์์๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๊ถํ ๋ถ์ฌ์ธ ์ธ์ฆ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ๋ค๋ฅธ ๊ฒ๊ณผ์ ์ฐจ์ด์ ์ XNUMX๋จ๊ณ, ์ฆ ์ถ๊ฐ ํ
์คํธ ์ค์
๋๋ค. ๋จผ์ ์ฌ์ฉ์๊ฐ ์ธ์ฆ ๊ถํ์ ์์ฒญํ๊ณ ์ธ์ฆ ์ฝ๋(Authorization Code)๋ผ๋ ํ ํฐ์ ๋ฐ์ ๋ค์ ์ด ํ ํฐ์ผ๋ก ๋ง์น ์ฌํ ํฐ์ผ์ฒ๋ผ ์ก์ธ์ค ํ ํฐ์ ์์ฒญํฉ๋๋ค. ์ด ๊ถํ ๋ถ์ฌ ์คํฌ๋ฆฝํธ์ ๋ชจ๋ ์ฃผ์ ์ํธ ์์ฉ์ ์์ฉ ํ๋ก๊ทธ๋จ๊ณผ ๊ถํ ๋ถ์ฌ ์๋ฒ ๊ฐ์ ๋ฆฌ๋๋ ์
์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ์ด ๋ณด์กฐ๊ธ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฝ์ ์ ์์ต๋๋ค.
OAuth๋ ๊ถํ ๋ถ์ฌ ํ ์ป์ ์ก์ธ์ค ํ ํฐ์ด ์ผ์์ ์ด์ด์ผ ํ๋ฉฐ ๊ฐ๊ธ์ ํ๊ท 10๋ถ๋ง๋ค ๋ณ๊ฒฝ๋์ด์ผ ํ๋ค๋ ๊ฐ๋ ์ ๊ณ ์ํฉ๋๋ค. ์ธ์ฆ ์ฝ๋ ๋ถ์ฌ๋ ๋ฆฌ๋๋ ์ ์ ํตํ 10๋จ๊ณ ์ธ์ฆ์ผ๋ก, XNUMX๋ถ๋ง๋ค ์ด๋ฌํ ๋จ๊ณ๋ฅผ ์ ํํ๋ ๊ฒ์ ์์งํ ๋์ ๊ฐ์ฅ ์ฆ๊ฑฐ์ด ์์ ์ด ์๋๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฐ๋ฆฌ๋๋ผ์์๋ ์ฌ์ฉ๋๋ Refresh Token์ด๋ผ๋ ๋ ๋ค๋ฅธ ๋ณด์กฐ๊ธ์ด ์์ต๋๋ค. ์ฌ๊ธฐ์ ๋ชจ๋ ๊ฒ์ด ๋ ์ฝ์ต๋๋ค. ๋ค๋ฅธ ์น์ธ์์ ํ์ธํ๋ ๋์ ๊ธฐ๋ณธ ์ก์ธ์ค ํ ํฐ ์ธ์๋ ํ ๋ฒ๋ง ์ฌ์ฉํ ์ ์๊ณ ์ผ๋ฐ์ ์ผ๋ก ์๋ช ์ด ํจ์ฌ ๋ ๊ธด ์๋ก ๊ณ ์นจ ํ ํฐ์ด๋ผ๋ ๋ ๋ค๋ฅธ ํ ํฐ์ด ๋ฐ๊ธ๋ฉ๋๋ค. ์ด Refresh Token์ ์ฌ์ฉํ๋ฉด ๊ธฐ๋ณธ ์ก์ธ์ค ํ ํฐ์ TTL(Time to Live)์ด ์ข ๋ฃ๋๋ฉด ์ ์ก์ธ์ค ํ ํฐ์ ๋ํ ์์ฒญ์ด ๋ค๋ฅธ ๊ถํ ๋ถ์ฌ์ ๋์ ์ผ๋ก ์ฌ ๊ฒ์ ๋๋ค. ์ฌ์ฉํ ์๋ก ๊ณ ์นจ ํ ํฐ์ ์ฆ์ XNUMX์ผ๋ก ์ฌ์ค์ ๋ฉ๋๋ค. ์ด ๊ฒ์ฌ๋ XNUMX๋จ๊ณ๋ก ์ด๋ฃจ์ด์ง๋ฉฐ ์ฌ์ฉ์๊ฐ ์ธ์งํ์ง ๋ชปํ๋ ์ฌ์ด์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ํํ ์ ์์ต๋๋ค.
3) ์ฌ์ฉ์ ์ง์ ๋ฐ์ดํฐ ์ถ๋ ฅ ํ์ ์ค์
์ ํํ ๊ถํ ๋ถ์ฌ๊ฐ ๊ตฌํ๋๊ณ ์ธ์ฆ์ด ์๋ํ๋ฉด ์ต์ข ์ฌ์ฉ์์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ ์ธ๊ธํ ๊ฐ์น๊ฐ ์์ต๋๋ค. OIDC์๋ ์ด๋ฅผ ์ํ ๋ณ๋์ ์๋ํฌ์ธํธ๊ฐ ์์ผ๋ฉฐ, ์ฌ๊ธฐ์์ ํ์ฌ ์ก์ธ์ค ํ ํฐ๊ณผ ์ต์ ์ํ์ธ ๊ฒฝ์ฐ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ์์ ๋ฐ์ดํฐ๊ฐ ์์ฃผ ๋ณ๊ฒฝ๋์ง ์๊ณ ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๋ฒ ๋ฐ๋ผ์ผ ํ๋ ๊ฒฝ์ฐ JWT ํ ํฐ๊ณผ ๊ฐ์ ์๋ฃจ์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฌํ ํ ํฐ์ ํ์ค์์๋ ์ง์๋ฉ๋๋ค. JWT ํ ํฐ ์์ฒด๋ ํค๋(ํ ํฐ์ ๋ํ ์ ๋ณด), ํ์ด๋ก๋(ํ์ํ ๋ฐ์ดํฐ) ๋ฐ ์๋ช (์๋ช , ํ ํฐ์ ์๋ฒ์์ ์๋ช ํ๊ณ ๋์ค์ ์๋ช ์์ค๋ฅผ ํ์ธํ ์ ์์)์ ์ธ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
OIDC ๊ตฌํ์์ JWT ํ ํฐ์ id_token์ด๋ผ๊ณ ํฉ๋๋ค. ์ผ๋ฐ ์ก์ธ์ค ํ ํฐ๊ณผ ํจ๊ป ์์ฒญํ ์ ์์ผ๋ฉฐ ๋จ์ ๊ฒ์ ์๋ช
์ ํ์ธํ๋ ๊ฒ์
๋๋ค. ์ธ์ฆ ์๋ฒ์๋ ๋ค์๊ณผ ๊ฐ์ ํ์์ ์ฌ๋ฌ ๊ณต๊ฐ ํค๊ฐ ์๋ ๋ณ๋์ ์๋ํฌ์ธํธ๊ฐ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด Google์์:
{
"issuer": "https://accounts.google.com",
"authorization_endpoint": "https://accounts.google.com/o/oauth2/v2/auth",
"device_authorization_endpoint": "https://oauth2.googleapis.com/device/code",
"token_endpoint": "https://oauth2.googleapis.com/token",
"userinfo_endpoint": "https://openidconnect.googleapis.com/v1/userinfo",
"revocation_endpoint": "https://oauth2.googleapis.com/revoke",
"jwks_uri": "https://www.googleapis.com/oauth2/v3/certs",
"response_types_supported": [
"code",
"token",
"id_token",
"code token",
"code id_token",
"token id_token",
"code token id_token",
"none"
],
"subject_types_supported": [
"public"
],
"id_token_signing_alg_values_supported": [
"RS256"
],
"scopes_supported": [
"openid",
"email",
"profile"
],
"token_endpoint_auth_methods_supported": [
"client_secret_post",
"client_secret_basic"
],
"claims_supported": [
"aud",
"email",
"email_verified",
"exp",
"family_name",
"given_name",
"iat",
"iss",
"locale",
"name",
"picture",
"sub"
],
"code_challenge_methods_supported": [
"plain",
"S256"
],
"grant_types_supported": [
"authorization_code",
"refresh_token",
"urn:ietf:params:oauth:grant-type:device_code",
"urn:ietf:params:oauth:grant-type:jwt-bearer"
]
}
๋ฐ๋ผ์ id_token์ ์ฌ์ฉํ๋ฉด ํ์ํ ๋ชจ๋ ํน์ง์ ํ ํฐ์ ํ์ด๋ก๋๋ก ์ ์กํ ์ ์์ผ๋ฉฐ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ธฐ ์ํด ๋งค๋ฒ ์ธ์ฆ ์๋ฒ์ ์ ์ํ์ง ์์๋ ๋ฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๋จ์ ์ ์๋ฒ์์ ์ฌ์ฉ์ ๋ฐ์ดํฐ๊ฐ ์ฆ์ ๋ณ๊ฒฝ๋์ง ์๊ณ ์ ์ก์ธ์ค ํ ํฐ๊ณผ ํจ๊ป ๋ณ๊ฒฝ๋๋ค๋ ๊ฒ์ ๋๋ค.
์ํ ๊ฒฐ๊ณผ
๋ฐ๋ผ์ ์์ฒด OIDC ์๋ฒ๋ฅผ ๊ตฌํํ๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ธก์์ ์ด์ ๋ํ ์ฐ๊ฒฐ์ ๊ตฌ์ฑํ ํ ์ฌ์ฉ์ ์ ๋ณด ์ ์ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
OIDC๋ ๊ฐ๋ฐฉํ ํ์ค์ด๋ฏ๋ก ๊ธฐ์กด ๊ณต๊ธ์ ๋๋ ์๋ฒ ๊ตฌํ์ ์ ํํ ์ ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์
์ธก์์ ์ฐ๊ฒฐ ๊ตฌ์ฑ์ ์ค์ ํ๊ณ ๋ณ๊ฒฝํ ํ ๊ตฌ์ฑ์ด ๋งค์ฐ ํธ๋ฆฌํ ๊ฒ์ผ๋ก ํ๋ช
๋ Keycloak๋ฅผ ์ฌ์ฉํด ๋ณด์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์
์ธก๋ฉด์์ ๋จ์ ๊ฒ์ ์ฐ๊ฒฐ ๊ตฌ์ฑ์ ๋ณ๊ฒฝํ๋ ๊ฒ์
๋๋ค.
๊ธฐ์กด ์๋ฃจ์ ์ ๋ํด ์ด์ผ๊ธฐํ๊ธฐ
์ฐ๋ฆฌ ์กฐ์ง ๋ด์์ ์ต์ด์ OIDC ์๋ฒ๋ก์ ํ์์ ๋ฐ๋ผ ๋ณด์๋๋ ์์ฒด ๊ตฌํ์ ์กฐ๋ฆฝํ์ต๋๋ค. ๋ค๋ฅธ ๊ธฐ์ฑ ์๋ฃจ์ ์ ์์ธํ ๊ฒํ ํ ํ ์ด๊ฒ์ด ๋ ผ์ ์ด๋ผ๊ณ ๋งํ ์ ์์ต๋๋ค. ์์ฒด ์๋ฒ๋ฅผ ๊ตฌํํ๊ธฐ๋ก ํ ๊ฒฐ์ ์ ์ฐฌ์ฑํ์ฌ ์ผ๋ถ ์๋น์ค์ ๋ํด ์๋ก ๋ค๋ฅธ ์ฌ์ฉ์ ์ ์ ์ธ์ฆ์ด ์๋ ์ค๋๋ ์์คํ ์ ์กด์ฌ๋ฟ๋ง ์๋๋ผ ํ์ํ ๊ธฐ๋ฅ์ด ์๋ ๊ณต๊ธ์ ์ธก์ ๋ํ ์ฐ๋ ค๊ฐ ์์์ต๋๋ค. ์ง์์ ๋ํ ๋ฐ์ดํฐ๋ ์ด๋ฏธ ์ ์ฅ๋์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ธฐ์ฑํ ๊ตฌํ์๋ ํตํฉ์ ๋ํ ํธ์๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด Keycloak์๋ ์์ฒด ์ฌ์ฉ์ ๊ด๋ฆฌ ์์คํ ์ด ์๊ณ ๋ฐ์ดํฐ๊ฐ ์ง์ ์ ์ฅ๋๋ฏ๋ก ์ฌ์ฉ์๋ฅผ ์ถ์ํ๋ ๊ฒ์ด ์ด๋ ต์ง ์์ต๋๋ค. ์ด๋ฅผ ์ํด Keycloak์๋ ํ์ํ ๋ชจ๋ ์ ์ก ์์ ์ ์์ ํ ์ํํ ์ ์๋ API๊ฐ ์์ต๋๋ค.
๋ด ์๊ฐ์ ์ธ์ฆ๋๊ณ ํฅ๋ฏธ๋ก์ด ๊ตฌํ์ ๋ ๋ค๋ฅธ ์๋ Ory Hydra์ ๋๋ค. ๊ทธ๊ฒ์ ๋ค๋ฅธ ๊ตฌ์ฑ ์์๋ก ๊ตฌ์ฑ๋์ด ์๊ธฐ ๋๋ฌธ์ ํฅ๋ฏธ ๋กญ์ต๋๋ค. ํตํฉํ๋ ค๋ฉด ์ฌ์ฉ์ ๊ด๋ฆฌ ์๋น์ค๋ฅผ ์ธ์ฆ ์๋น์ค์ ์ฐ๊ฒฐํ๊ณ ํ์์ ๋ฐ๋ผ ํ์ฅํด์ผ ํฉ๋๋ค.
Keycloak๊ณผ Ory Hydra๋ง์ด ๊ธฐ์ฑ ์๋ฃจ์ ์ด ์๋๋๋ค. OpenID Foundation์์ ์ธ์ฆํ ๊ตฌํ์ ์ ํํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค. ์ด๋ฌํ ์๋ฃจ์ ์๋ ์ผ๋ฐ์ ์ผ๋ก OpenID ์ธ์ฆ ๋ฐฐ์ง๊ฐ ์์ต๋๋ค.
๋ํ OIDC ์๋ฒ๋ฅผ ์ ์งํ์ง ์์ผ๋ ค๋ ๊ฒฝ์ฐ ๊ธฐ์กด ์ ๋ฃ ๊ณต๊ธ์๋ฅผ ์์ง ๋ง์ญ์์ค. ์ค๋๋ ์๋ ์ข์ ์ต์ ์ด ๋ง์ด ์์ต๋๋ค.
๋ค์ ๋จ๊ณ
๊ฐ๊น์ด ์์ผ ๋ด์ ๋ด๋ถ ์๋น์ค์ ๋ํ ํธ๋ํฝ์ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์ฐจ๋จํ ์์ ์
๋๋ค. OpenResty๋ฅผ ์ฌ์ฉํ์ฌ ๊ท ํ ์ฅ์น์ ํ์ฌ SSO๋ฅผ OAuth ๊ธฐ๋ฐ ํ๋ก์๋ก ์ด์ ํ ๊ณํ์
๋๋ค. ์ฌ๊ธฐ์๋ ์ด๋ฏธ ๋ง์ ๊ธฐ์ฑ ์๋ฃจ์
์ด ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ถ๊ฐ ์๋ฃ
์ถ์ฒ : habr.com