๊ฐ์
Keycloak์ ์คํ์์ค(Apache License2.0) ID ๋ฐ ์์ธ์ค ๊ด๋ฆฌ ์๋ฃจ์
์ด๋ค.
์ด๊ฒ๋ง ์๊ณ ์ผ๋จ ์์ํด๋ณด์
Keycloak ๋์ปค๋ก ๋์๋ณด๊ธฐ
Keycloak์ ์ค์น ๋งค๋ด์ผ์ด ์ ๋ง ์๋์ด์๋ค.
๊ณต์๋ฌธ์์ ์ ๋ง ์์ธํ ์ ์์ฑ๋์ด์์ด ๋ฌธ์์ ๋ฐ๋ผ ์งํํด๋ณด์.
docker run -p 8080:8080 \
-e KEYCLOAK_ADMIN=admin \
-e KEYCLOAK_ADMIN_PASSWORD=admin \
quay.io/keycloak/keycloak:24.0.4 \
start-dev
docker run ๋ช
๋ น์ด๋ฅผ ํตํด ์ฝ๊ฒ keycloak์ ๋์ธ ์ ์๋ค.
http://localhost:8080 ์ ์ ์ํ๊ณ ๋ก๊ทธ์ธํด๋ณด์. (id/pw: admin/admin)
๋ก๊ทธ์ธํ ๋ฐ๋ก ๋ง๋๊ฒ ๋๋๊ฒ์ด master realm์ด๋ค.
master realm์ด ๋ญ์ง ์์ํ๋ฐ, ๊ฐ๋
์ ์กฐ๊ธ ์ดํด๋ณด๊ณ ์ง๋๊ฐ์.
Realm์ด ๋ญ์ง ์ดํดํ๊ธฐ ๐คช
keycloak๋๋ถ์ ์ด ์ต์์น ์์ ๋จ์ด realm, "๋ ๋ฆ".. ์ต์ํด์ ธ๊ฐ๋ค..
keycloak์์ realm์ด๋ ๋
ผ๋ฆฌ์ ์ผ๋ก ๋๋์ด์ง ๊ด๋ฆฌ ์์ญ์ ๋งํ๋ค.
realm์ด๋ "์๊ตญ" ์ด๋ผ๋ ๋ป์ผ๋ก, ๋ง ๊ทธ๋๋ก ํ๋ ํ๋์ realm์ ๊ฐ์์ ์์์ด ๋๋์ด์ ธ์์ด, ์ฌ์ฉ์, ์ ์ฑ
๋ฑ ์์ ํ ๋ถ๋ฆฌํ์ฌ ๊ฐ๊ฐ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
master realm
๊ทธ์ค์ master realm์, keyclock์ค์น ์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณต๋๋ ์ต์์ realm์ด๋ค.
- master realm ์ ์ญํ
- ๊ด๋ฆฌ: Master realm์ Keycloak ์ธ์คํด์ค ์ ์ฒด๋ฅผ ๊ด๋ฆฌํ๋๋ฐ ์ฌ์ฉ๋๋ฉฐ, ๋ค๋ฅธ realm์ ์์ฑ, ์ญ์ , ์ค์ ๋ฑ์ ๊ด๋ฆฌํจ
- ๊ด๋ฆฌ์ ์ฌ์ฉ์: Master realm์๋ Keycloak ๊ด๋ฆฌ์ ์ฌ์ฉ์๊ฐ ํฌํจ๋จ
- ๋ชฉ์ : ๋ณด์ ๋ฐ ๋ถ๋ฆฌ๋ ๊ด๋ฆฌ๋ฅผ ์ํด ์ค์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ๋ ๋ถ๋ฆฌ๋์ด, ์์คํ ์ ์ฒด ์ค์ ์ ๋ค๋ฃจ๊ธฐ ์ํ ๋ชฉ์ ์ผ๋ก ์ฃผ๋ก ์ฌ์ฉ๋จ
์ฆ, master realm์ด๋ ์ดํ๋ฆฌ์ผ์ด์ ํ๊ณ ์ฐ๊ฒฐํ๋ ๋ชฉ์ ์ด ์๋, keyclock ์์ฒด๋ฅผ ์ด์ํ๊ธฐ ์ํ ์์ญ์ด๋ค.
realm
๊ทธ๋ ๋ค๋ฉด realm์๋ ๋ฌด์์ด ํฌํจ๋์ด์๊ณ , ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ํ์ธํด๋ณด์.
- realm์ ๊ตฌ์ฑ์์
- ์ฌ์ฉ์(User): ๊ฐ realm์ ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ถ๋ฆฌ๋, ์์ฒด ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ฐ์ง
- ๊ทธ๋ฃน(Group): ์ฌ์ฉ์๋ฅผ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด ์ญํ ์ด๋ ๊ถํ์ ๊ทธ๋ฃน ๋จ์๋ก ๊ด๋ฆฌํ ์ ์์
- ํด๋ผ์ด์ธํธ(Client): ํด๋ผ์ด์ธํธ๋ Keycloak์ ์ํด ๋ณดํธ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ ์๋น์ค๋ฅผ ๋งํ๋ฉฐ, ๊ฐ realm์์ ํด๋ผ์ด์ธํธ๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ์ฐ๊ฒฐํจ
- ์ญํ (Role):์ฌ์ฉ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ํํ ์ ์๋ ์์ ์ ์ ์ํจ
- ์์ด๋ดํฐํฐ ์ ๊ณต์(Identity Providers): ๊ฐ realm์ ์ธ๋ถ ์์ด๋ดํฐํฐ ์ ๊ณต์(์: Google, Facebook ๋ฑ)์ ํตํฉํ ์ ์์
- ์ ์ฑ (Policies): ๊ฐ realm์ ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ ์ ์ฑ ์ ์ค์ ํ ์ ์์
realm์๋ ๋ ๋ฆฝ์ ์ธ ์ฌ์ฉ์, ๊ทธ๋ฃน, ํด๋ผ์ด์ธํธ, ์ญํ ๋ฑ์ ์ ์ํ๋ฉฐ ๋ฉํฐํ ๋์ ํ๊ฒฝ์ด๋ ํ๊ฒฝ๋ถ๋ฆฌ(๊ฐ๋ฐ/ํ๋ก๋์ ), ๋๋ ์๋น์ค ๊ธฐ์ค์ผ๋ก ๋๋์ด ๊ด๋ฆฌ ๊ฐ๋ฅํ๋ค.
Realm ๋ง๋ค์ด ์จ๋ณด๊ธฐ
Realm ๋ง๋ค๊ธฐ (myservice)
์์์ realm ๊ฐ๋
์ ๋ํด ์ค์ ํด๋ดค์ผ๋, realm์ ํ๋ ๋ง๋ค์ด๋ณด์.
์์ฒญ ๊ฐ๋จํ๋ค, keycloak ์์ ํ์ดํ๋ฅผ ํด๋ฆญํ๋ฉด Create realm์ด ๋์จ๋ค.
์๋น์ค ์ด๋ฆ์ ์ ๋ ฅํ๊ณ (myservice) create ํ๋ฉด ๋๋ค.
์ด์ myservice๋ผ๋ realm์ด ๋ง๋ค์ด์ก๋ค.
์์์ ์ค๋ช
ํ user, group, client, role, identity providers, polices๋ฅผ ํ๋์ฉ ์ดํด๋ณด์
์ฌ์ฉ์(user) ๋ง๋ค๊ธฐ
๋จผ์ ์์์ ์์ฑํ myservice realm์์ ์ฌ์ฉ์๋ฅผ ๋ง๋ค์ด๋ณด์.
์ผ์ชฝ ๋ฉ๋ด [Users] -> [create new user] ์์ ์ผ๋จ username์ ๋ฃ๊ณ create ํ๋ค.
์ฌ์ฉ์๋ฅผ ์์ฑํ๋ฉด ์๋ ํ๋ฉด๊ณผ ๊ฐ์ด ์ฌ์ฉ์์ ๋ํ ์ค์ ํ์ธํ ์ ์๋ค.
๊ฐ ํญ๋ค์ ์๋์ ์ ๋ณด๋ฅผ ํ์ธํ๊ณ ์์ ํ ์ ์๋ค.
- Details (์ธ๋ถ ์ ๋ณด): ์ฌ์ฉ์ UUID, ์์ฑ ์๊ฐ, ๋ก๊ทธ์ธ ์ ์ํํด์ผ ํ ์์ , ์ด๋ฉ์ผ ๊ฒ์ฆ ์ฌ๋ถ ๋ฑ.
- Credentials (์๊ฒฉ์ฆ๋ช ): ๋น๋ฐ๋ฒํธ, ์ฌ์ฉ์์ ์๊ฒฉ ์ฆ๋ช ๋ชฉ๋ก.
- Role mapping (์ญํ ๋งคํ): ์ฌ์ฉ์๊ฐ ๋ถ์ฌ๋ฐ์ ์ ์ญ ์ญํ , ํน์ ํด๋ผ์ด์ธํธ์ ๋ํ ์ญํ ๋งคํ.
- Groups (๊ทธ๋ฃน): ์ฌ์ฉ์๊ฐ ์ํ ๊ทธ๋ฃน ๋ชฉ๋ก, ๊ทธ๋ฃน ์ถ๊ฐ ๋ฐ ์ ๊ฑฐ.
- Consents (๋์): ์ฌ์ฉ์๊ฐ ๋ถ์ฌํ ๋์ ๋ชฉ๋ก, ๋์ ์ฒ ํ.
- Identity provider links (์์ด๋ดํฐํฐ ์ ๊ณต์ ๋งํฌ): ์ธ๋ถ ์์ด๋ดํฐํฐ ์ ๊ณต์์์ ์ฐ๊ฒฐ ์ ๋ณด, ์ฐ๊ฒฐ ์ถ๊ฐ ๋ฐ ์ ๊ฑฐ.
- Sessions (์ธ์ ): ํ์ฌ ์ฌ์ฉ์์ ํ์ฑ ์ธ์ ๋ชฉ๋ก, ์ธ์ ๋ก๊ทธ์์ ๋ฐ ์ธ์ ์ธ๋ถ ์ ๋ณด.
์ฌ์ฉ์(user) ๋ก๊ทธ์ธ ํ๊ธฐ
๋จผ์ ์ฌ์ฉ์๋ก ๋ก๊ทธ์ธํ๊ธฐ ์ํด์๋ ๋น๋ฐ๋ฒํธ ์ค์ ์ด ํ์ํ๋ค.
user01์ Credentials ํญ์์ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ฑ๋กํด์ค๋ค.
๋ฑ๋ก์ด ์๋ฃ๋์๋ค๋ฉด, ์๋์ฒ๋ผ ๋น๋ฐ๋ฒํธ ์ค์ ๋๊ฒ์ด ํ์ธ๋๋ค.
keycloak์ ๊ธฐ๋ณธ ์ฌ์ฉ์ํ์ด์ง๋ฅผ ์ ๊ณตํ๋ค.
* ์ฌ์ฉ์ ๋ก๊ทธ์ธํ์ด์ง: http://localhost:8080/realms/myservice/account
์ด์ ์์์ ์์ฑํ ์ฌ์ฉ์ user01๋ก ๋ก๊ทธ์ธํ๋ค.
์ฌ์ฉ์๋ก ๋ก๊ทธ์ธํ๋ค๋ฉด ์ฌ์ฉ์์ ๋ณด, ๊ณ์ ๋ณด์์ค์ , ๊ทธ๋ฆฌ๊ณ ์ฐ๊ฒฐ๋ ์ดํ๋ฆฌ์ผ์ด์ ๋ชฉ๋ก์ ํ์ธํ ์ ์๋ค.
์ง๊ธ์ ์๋ฌด๊ฒ๋ ์ฐ๊ฒฐ๋์ด์์ง ์์ ์ดํ๋ฆฌ์ผ์ด์ ์ด ์๋ค.
[์ฐธ๊ณ ] ์ฌ์ฉ์(user) ๋ก๊ทธ์ธ ํ์ด์ง ์ค์ ๋ณ๊ฒฝ
๊ธฐ๋ณธ ์ฌ์ฉ์ ํ์ด์ง๋ realm settings ์์ ์์ ํ ์ ์๋ค.
์ฌ์ฉ์๊ฐ ์ค์ค๋ก ๋ฆฌ์์ค ๊ถํ๊ด๋ฆฌํ ์ ์๋๋ก ์ฌ์ฉ์ ๊ด๋ฆฌ ์ก์ธ์ค๋ฅผ ํ์ฉํด์ค๋ค๊ฑฐ๋, ์ฌ์ฉ์ ๊ฐ์
, ๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ , ๋น๋ฐ๋ฒํธ ๊ธฐ์ตํ๊ธฐ ๊ธฐ๋ฅ, ์ด๋ฉ์ผ ์ค์ , ํ
๋ง๋ณ๊ฒฝ ๋ฑ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ํ๋ฒ ์ญ ํ์ธํด๋ณด๋๊ฒ ์ข๋ค.
Clients ์ฐ๊ฒฐํด๋ณด๊ธฐ
์ด์ Keycloak์์ ์ ๊ณตํ๋ ํ ์คํธ ํ์ด์ง์ ์ฐ๊ฒฐ์ ํด๋ณด์
๋จผ์ , [Clients] -> [Create client]๋ฅผ ํด๋ฆญํ๋ค.
์ฒซ๋ฒ์งธ ๋จ๊ณ์์๋ ClientID: keycloak_test๋ฅผ ์ ๋ ฅํ๋ค.
๋๋ฒ์งธ ๋จ๊ณ๋ ์๋๊ฒ ์๋ค. ๋ค์์ผ๋ก ๋ฐ๋ก ๋์ด๊ฐ๋ค.
์ธ๋ฒ์งธ ๋จ๊ณ์์๋ ๊ฐ์ ๊ฐ๊ฐ ์ ๋ ฅํด์ค๋ค.
- Valid redirect URIs: https://www.keycloak.org/app/*
- Web origins: https://www.keycloak.org
keycloak_test Clients๊ฐ ์์ฑ๋์๋ค.
์ด์ , KeyCloak์์ ์ ๊ณตํด์ฃผ๋ ํ
์คํธ ํ์ด์ง(https://www.keycloak.org/app/)์ ์ ์ํ๊ณ ,
realm ์ด๋ฆ(= myservice)์ Client(= keycloak_test)๋ฅผ ์
๋ ฅํ๋ค.
์ด์ [Sign in]์ ํด๋ฆญํด์ Keycloak ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ ๋๋์ง ํ๋ฒ ํด๋ณด์!
[Sign in] ์ ํด๋ฆญํ๋ฉด http://localhost:8080/realms/myservice/protocol/openid-connect/auth?client_id=keycloak_test ์ผ๋ก ๋ฆฌ๋๋ ์ ๋๋ฉฐ, ๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ์ ๋ ฅํ๊ฒ ๋๋ค.
์ฌ๋ฐ๋ฅธ ์ ๋ณด๋ฅผ ์ ๋ ฅํ๋ค๋ฉด, ์๋์ ๊ฐ์ด Hello, ์ฌ์ฉ์ ๊ฐ ๋ณด์ผ๊ฒ์ด๋ค.
Keycloak ๋ง๋ณด๊ธฐ #1์์๋ ๊ณต์๋ฌธ์๋ฅผ ๋ฐ๋ผ์ ์งํํ๋ฉด์, ์ถ๊ฐ์ ์ผ๋ก ์๋ฉด ์ข์๊ฒ๋ค์ ์์ฑํด๋ดค๋ค.
์ด์ ๋ง๋ณด๊ธฐ #2์์๋ google suite๋ ์ฐ๊ฒฐํ๊ณ , AWS๊ณ์ ์ด๋ VPN ๋ฑ์ ์ฐ๊ฒฐํด๋ณผ ์์ ์ด๋ค.
์ค๋๋ ํ์ดํ ๐ ๋ด์ผ๋ ํ์ดํ ๐