ํด๋ผ์ฐ๋ ๊ด๋ จ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ keycloak์ ์ฌ์ฉํ๊ฒ ๋์ด ๊ณต๋ถํ ๋ด์ฉ์ ์ ๋ฆฌํ๊ณ ์ ํ๋ค ๐ป
Keycloak์ด๋ ๋ฌด์์ผ๊น?
๊ณต์ ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด Keycloak
์ ID ๋ฐ ์ก์ธ์ค ๊ด๋ฆฌ ์๋ฃจ์
์ ์ ๊ณตํ๋ ์คํ์์ค์ด๋ค.
์ฝ๊ฒ ๋งํ๋ฉด ์ธ์ฆ(Authentication)๊ณผ ์ธ๊ฐ(Authorization)์ ์ฝ๊ฒ ํด์ฃผ๊ณ SSO(Single-Sign-On)์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ์คํ์์ค์ด๋ค.
์ฒ์์๋ SSO ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด ์ฌ์ฉํ ์คํ์์ค์ธ๋ฐ SSO ์ด์ธ์๋ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ด ๋ค์ํ์ฌ ํฐ ๋์์ ๋ฐ์๋ค!
์ฐ์ Keycloak์์ ์ ๊ณตํ๋ค๋ SSO๊ฐ ๋ฌด์์ธ์ง ์์๋ณด์.
SSO
๋ Single-Sign-On
์ ์ฝ์๋ก ํ๋ฒ์ ๋ก๊ทธ์ธ์ ํตํด ๊ทธ์ ์ฐ๊ฒฐ๋ ์ฌ๋ฌ๊ฐ์ง ๋ค๋ฅธ ์ฌ์ดํธ๋ค์ ์๋์ผ๋ก ์ ์ํ์ฌ ์ด์ฉํ ์ ์๋๋ก ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ผ๋ฐ์ ์ผ๋ก๋ ๊ฐ์ ๋ค๋ฅธ ์ฌ์ดํธ๋ผ๊ณ ํ๋ฉด ๊ฐ๊ฐ์ DB์ ๊ฐ๊ฐ์ ์ฌ์ฉ์ ์ ๋ณด๊ฐ ์๊ณ ๊ทธ ์ ๋ณด๋ฅผ ํตํด์ ๊ด๋ฆฌ๋ฅผ ํ๊ฒ ๋๋๋ฐ, ํ์์ ๋ฐ๋ผ์๋ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ฐ๋ํ์ฌ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๋ค. ์ด๋ฐ ๊ฒฝ์ฐ์ SSO ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ฒ ๋๋ฉฐ ํ๋์ ์์คํ ์์ ์ธ์ฆ์ ํ ๊ฒฝ์ฐ ๊ทธ์ ์ฐ๊ฒฐ๋ ๋ค๋ฅธ ์์คํ ์์๋ ์ธ์ฆ ์ ๋ณด๊ฐ ์๋์ง ์๋์ง๋ฅผ ํ์ธํ์ฌ ์ดํ ์ฒ๋ฆฌ๋ฅผ ํ๋๋ก ๋ง๋ค๋ฉด ๋๋ ๊ฒ์ด๋ค.
์ฆ, ํ๋์ ์์ด๋์ ํจ์ค์๋๋ฅผ ํตํด ์ฌ๋ฌ ์์คํ ์ ์ ๊ทผํ ์ ์๋๋ก ํ๋ ํตํฉ ์ธ์ฆ ์๋ฃจ์ ์ธ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด ํ๋์ ํ์ฌ ๋ด๋ถ์์ ๋ค์ํ ์์คํ ์ ์ด์ํ๊ณ ์๋ ๊ฒฝ์ฐ, ์์คํ ๊ฐ๊ฐ์ ๋ํด ์ฌ์ ์ ๋ณด๊ฐ ์ค๋ณต์ผ๋ก ์กด์ฌํ ํ์๊ฐ ์๊ธฐ์ SSO ์ธ์ฆ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๋๊ฒ ์ ํฉํ ๊ฒ์ด๋ค!
์ง์ ์ด๊ฒ์ ๊ฒ ์ฌ์ฉํด๋ณด๋ฉด์ ๋ฐฐ์ฐ๋๊ฒ ์ ์ผ ๋น ๋ฅด๋๊น! docker๋ฅผ ์ฌ์ฉํ๋ฉด keycloak์ ์ฝ๊ฒ ์คํ์ํฌ ์ ์๋ค.
docker run -d --name keycloak -p 8080:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin jboss/keycloak:10.0.0
m1์นฉ ๋ ธํธ๋ถ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ jboss/keycloak image๊ฐ ์ง์๋์ง ์์ ๋ค๋ฅธ keycloak image๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค..
docker run -d --name keycloak -p 8080:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin quay.io/keycloak/keycloak:legacy
keycloak์ ์คํ์ํจ ๋ค localhost:8080/auth
๋ก ์ ์ํ๋ฉด ๊ด๋ฆฌ์ ์ฝ์์ ์ ์ํ ์ ์๋ค.
docker๋ก ์คํ์ํฌ ๋ ์ค์ ํด์ค ์์ด๋์ ํจ์ค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๊ด๋ฆฌ์ ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธํ ์ ์๋ค.
keycloak์์ Realm
์ ์ธ์ฆ, ๊ถํ ๋ถ์ฌ๊ฐ ์ ์ฉ๋๋ ๋ฒ์์ ๋จ์์ด๋ค. SSO ๊ธฐ๋ฅ์ ์ ์ฉํ๋ค๊ณ ํ์ ๋ SSO๊ฐ ์ ์ฉ๋๋ ๋ฒ์๊ฐ ํ๋์ Realm ๋จ์์ธ ๊ฒ์ด๋ค.
์ฒ์ ์ ์์ ํ๋ฉด ๋ณด์ด๋ Master realm์ ์ฒซ๋ฒ์งธ keycloak์ ๋ง๋ค๋ฉด ์๋์ผ๋ก ์์ฑ๋๋ realm์ด๋ฉฐ add realm ๋ฒํผ์ ํตํด ์ฝ๊ฒ ๋ค๋ฅธ realm์ ์ถ๊ฐํ ์ ์๋ค.
keycloak์์ Client
๋ ์ธ์ฆ, ๊ถํ ๋ถ์ฌ ํ์๋ฅผ ์ํํ ์ดํ๋ฆฌ์ผ์ด์
์ ๋ํ๋ด๋ ๋จ์์ด๋ค.
ํ๋์ realm ์์๋ ์ฌ๋ฌ ๊ฐ์ client๊ฐ ๋ค์ด๊ฐ ์ ์์ผ๋ฉฐ realm์ ๊ด๋ฆฌ์๊ฐ ๊ฐ๊ฐ์ client๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค.
client๋ ๋ณดํต ์๋น์ค ๋จ์๋ก ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ฉด ๋๋ค!
keycloak์์ User
๋ ์ธ์ฆ์ ํ์๋กํ๋ ์ฌ์ฉ์๋ฅผ ๋ํ๋ธ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก User ์ ๋ณด๋ username, email, firstname, lastname์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ง๋ง custom user attribute๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ ์์ฑ์ ์ถ๊ฐํ ์ ์๋ค. (๋ค๋ง, ์ถ๊ฐ๋ ํญ๋ชฉ์ด ์ฌ์ฉ์ ๋ฑ๋ก ๋ฐ ๊ด๋ฆฌ ํ๋ฉด์๋ ์ถ๋ ฅ๋๋๋ก ํ๊ธฐ ์ํด์๋ ์ปค์คํ
ํ
๋ง ๋ฑ๋ก ๋ฐ ์์ ์ด ํ์ํ๋ค)
keycloak์์ Role
์ User์๊ฒ ๋ถ์ฌํ ๊ถํ์ ๋ด์ฉ์ ๋ํ๋ธ๋ค. ๋จ์ด ๋ป ๊ทธ๋๋ก User์๊ฒ ์ด๋ค ์ญํ ์ ๋ถ์ฌํ ๊ฒ์ธ์ง์ ๋ํ ๋ด์ฉ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
์ฐธ๊ณ
https://toma0912.tistory.com/75
https://jsonobject.tistory.com/445
https://nyeongnyeong.tistory.com/261
๊ฐ์ฌํฉ๋๋ค. ์ ๋ณด๊ณ ๊ฐ๋๋ค.