keycloak์ด ๋ญ์ง€ ๐Ÿง

Cherryยท2022๋…„ 9์›” 5์ผ
4
post-thumbnail

ํด๋ผ์šฐ๋“œ ๊ด€๋ จ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ keycloak์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์–ด ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๊ณ ์ž ํ•œ๋‹ค ๐Ÿ’ป

๐Ÿค” keycloak์ด๋ž€

Keycloak์ด๋ž€ ๋ฌด์—‡์ผ๊นŒ?

๊ณต์‹ ๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด Keycloak์€ ID ๋ฐ ์•ก์„ธ์Šค ๊ด€๋ฆฌ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•˜๋Š” ์˜คํ”ˆ์†Œ์Šค์ด๋‹ค.
์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ์ธ์ฆ(Authentication)๊ณผ ์ธ๊ฐ€(Authorization)์„ ์‰ฝ๊ฒŒ ํ•ด์ฃผ๊ณ  SSO(Single-Sign-On)์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ์˜คํ”ˆ์†Œ์Šค์ด๋‹ค.

์ฒ˜์Œ์—๋Š” SSO ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ ์˜คํ”ˆ์†Œ์Šค์ธ๋ฐ SSO ์ด์™ธ์—๋„ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๋‹ค์–‘ํ•˜์—ฌ ํฐ ๋„์›€์„ ๋ฐ›์•˜๋‹ค!

๐ŸŒˆ SSO(Single-Sign-On)๋ž€?

์šฐ์„  Keycloak์—์„œ ์ œ๊ณตํ•œ๋‹ค๋Š” SSO๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ณด์ž.

SSO๋Š” Single-Sign-On์˜ ์•ฝ์ž๋กœ ํ•œ๋ฒˆ์˜ ๋กœ๊ทธ์ธ์„ ํ†ตํ•ด ๊ทธ์™€ ์—ฐ๊ฒฐ๋œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ๋“ค์„ ์ž๋™์œผ๋กœ ์ ‘์†ํ•˜์—ฌ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ๊ฐ์ž ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ๋ผ๊ณ  ํ•˜๋ฉด ๊ฐ๊ฐ์˜ DB์— ๊ฐ๊ฐ์˜ ์‚ฌ์šฉ์ž ์ •๋ณด๊ฐ€ ์žˆ๊ณ  ๊ทธ ์ •๋ณด๋ฅผ ํ†ตํ•ด์„œ ๊ด€๋ฆฌ๋ฅผ ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ํ•„์š”์— ๋”ฐ๋ผ์„œ๋Š” ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์—ฐ๋™ํ•˜์—ฌ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ์— SSO ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉฐ ํ•˜๋‚˜์˜ ์‹œ์Šคํ…œ์—์„œ ์ธ์ฆ์„ ํ•  ๊ฒฝ์šฐ ๊ทธ์™€ ์—ฐ๊ฒฐ๋œ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์—์„œ๋Š” ์ธ์ฆ ์ •๋ณด๊ฐ€ ์žˆ๋Š”์ง€ ์—†๋Š”์ง€๋ฅผ ํ™•์ธํ•˜์—ฌ ์ดํ›„ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋„๋ก ๋งŒ๋“ค๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

์ฆ‰, ํ•˜๋‚˜์˜ ์•„์ด๋””์™€ ํŒจ์Šค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ์‹œ์Šคํ…œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ํ†ตํ•ฉ ์ธ์ฆ ์†”๋ฃจ์…˜์ธ ๊ฒƒ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ํ•˜๋‚˜์˜ ํšŒ์‚ฌ ๋‚ด๋ถ€์—์„œ ๋‹ค์–‘ํ•œ ์‹œ์Šคํ…œ์„ ์šด์˜ํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ, ์‹œ์Šคํ…œ ๊ฐ๊ฐ์— ๋Œ€ํ•ด ์‚ฌ์› ์ •๋ณด๊ฐ€ ์ค‘๋ณต์œผ๋กœ ์กด์žฌํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ์— SSO ์ธ์ฆ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์ ํ•ฉํ•œ ๊ฒƒ์ด๋‹ค!

๐Ÿ“‘ keycloak ์ œ๊ณต ๊ธฐ๋Šฅ

  1. ๋‹ค์ค‘ ํ”„๋กœํ† ์ฝœ ์ง€์›
    • OpenID Connect, OAuth 2.0 ๋ฐ SAML 2.0์˜ ์„ธ๊ฐ€์ง€ ํ”„๋กœํ† ์ฝœ์„ ์ง€์›ํ•œ๋‹ค. (OIDC๋Š” ์ธ์ฆ, OAuth 2.0์€ ์ธ๊ฐ€์— ๋ชฉ์ ์„ ๋‘” ํ”„๋กœํ† ์ฝœ์ด๋‹ค)
  2. SSO
    • ์‹ฑ๊ธ€ ์‚ฌ์ธ์˜จ ๋ฐ ์‹ฑ๊ธ€ ์‚ฌ์ธ์•„์›ƒ์„ ์ง€์›ํ•œ๋‹ค.
  3. ๊ด€๋ฆฌ์ž ์ฝ˜์†”
    • ์›น ๊ธฐ๋ฐ˜ GUI๋กœ ๊ด€๋ฆฌ์ž ์ฝ˜์†”์„ ์ œ๊ณตํ•œ๋‹ค.
  4. ์‚ฌ์šฉ์ž ID ๋ฐ ์•ก์„ธ์Šค
    • ์‚ฌ์šฉ์ž ์ง€์ • ์—ญํ•  ๋ฐ ๊ทธ๋ฃน์œผ๋กœ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ ๋…๋ฆฝ ์‹คํ–‰ํ˜• ์‚ฌ์šฉ์ž ID ๋ฐ ์•ก์„ธ์Šค ๊ด€๋ฆฌ์ž๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•˜๊ณ  ์‚ฌ์ „ ์ •์˜๋œ ์—ญํ• ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ผ๋ถ€๋ฅผ ๋ณดํ˜ธํ•˜๋Š”๋ฐ ์ถ”๊ฐ€์ ์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.
  5. ์™ธ๋ถ€ ID ์†Œ์Šค ๋™๊ธฐํ™”
    • ํ˜„์žฌ ์–ด๋–ค ์œ ํ˜•์˜ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋™๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.
  6. ์‹ ์› ์ค‘๊ฐœ
    • ์‚ฌ์šฉ์ž์™€ ์ผ๋ถ€ ์™ธ๋ถ€ ID ๊ณต๊ธ‰์ž ๋˜๋Š” ๊ณต๊ธ‰์ž๊ฐ„์˜ ํ”„๋ก์‹œ๋กœ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.
  7. ์†Œ์…œ ๋กœ๊ทธ์ธ
    • ๊ด€๋ฆฌ์ž ํŒจ๋„์—์„œ ์„ค์ •์„ ํ†ตํ•ด ์†Œ์…œ ID๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. (google, twitter, stack overflow ..)
  8. ํŽ˜์ด์ง€ ์‚ฌ์šฉ์ž ์ •์˜
    • ์‚ฌ์šฉ์ž์—๊ฒŒ ํ‘œ์‹œ๋˜๋Š” ๋ชจ๋“  ํŽ˜์ด์ง€์— ๋Œ€ํ•ด ์‚ฌ์šฉ์ž ์ง€์ •์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿงท keycloak ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

docker๋กœ ์‹คํ–‰์‹œํ‚ค๊ธฐ

์ง์ ‘ ์ด๊ฒƒ์ €๊ฒƒ ์‚ฌ์šฉํ•ด๋ณด๋ฉด์„œ ๋ฐฐ์šฐ๋Š”๊ฒŒ ์ œ์ผ ๋น ๋ฅด๋‹ˆ๊นŒ! docker๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด keycloak์„ ์‰ฝ๊ฒŒ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

docker run -d --name keycloak -p 8080:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin jboss/keycloak:10.0.0

m1 error

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

keycloak์—์„œ Realm์€ ์ธ์ฆ, ๊ถŒํ•œ ๋ถ€์—ฌ๊ฐ€ ์ ์šฉ๋˜๋Š” ๋ฒ”์œ„์˜ ๋‹จ์œ„์ด๋‹ค. SSO ๊ธฐ๋Šฅ์„ ์ ์šฉํ•œ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ SSO๊ฐ€ ์ ์šฉ๋˜๋Š” ๋ฒ”์œ„๊ฐ€ ํ•˜๋‚˜์˜ Realm ๋‹จ์œ„์ธ ๊ฒƒ์ด๋‹ค.
์ฒ˜์Œ ์ ‘์†์„ ํ•˜๋ฉด ๋ณด์ด๋Š” Master realm์€ ์ฒซ๋ฒˆ์งธ keycloak์„ ๋งŒ๋“ค๋ฉด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” realm์ด๋ฉฐ add realm ๋ฒ„ํŠผ์„ ํ†ตํ•ด ์‰ฝ๊ฒŒ ๋‹ค๋ฅธ realm์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

Client

keycloak์—์„œ Client๋Š” ์ธ์ฆ, ๊ถŒํ•œ ๋ถ€์—ฌ ํ–‰์œ„๋ฅผ ์ˆ˜ํ–‰ํ•  ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋‹จ์œ„์ด๋‹ค.
ํ•˜๋‚˜์˜ realm ์•ˆ์—๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ client๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ realm์˜ ๊ด€๋ฆฌ์ž๊ฐ€ ๊ฐ๊ฐ์˜ client๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
client๋Š” ๋ณดํ†ต ์„œ๋น„์Šค ๋‹จ์œ„๋กœ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋ฉด ๋œ๋‹ค!

User

keycloak์—์„œ User๋Š” ์ธ์ฆ์„ ํ•„์š”๋กœํ•˜๋Š” ์‚ฌ์šฉ์ž๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
๊ธฐ๋ณธ์ ์œผ๋กœ User ์ •๋ณด๋Š” username, email, firstname, lastname์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์ง€๋งŒ custom user attribute๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ์†์„ฑ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. (๋‹ค๋งŒ, ์ถ”๊ฐ€๋œ ํ•ญ๋ชฉ์ด ์‚ฌ์šฉ์ž ๋“ฑ๋ก ๋ฐ ๊ด€๋ฆฌ ํ™”๋ฉด์—๋„ ์ถœ๋ ฅ๋˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ปค์Šคํ…€ ํ…Œ๋งˆ ๋“ฑ๋ก ๋ฐ ์ˆ˜์ •์ด ํ•„์š”ํ•˜๋‹ค)

Role

keycloak์—์„œ Role์€ User์—๊ฒŒ ๋ถ€์—ฌํ•  ๊ถŒํ•œ์˜ ๋‚ด์šฉ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋‹จ์–ด ๋œป ๊ทธ๋Œ€๋กœ User์—๊ฒŒ ์–ด๋–ค ์—ญํ• ์„ ๋ถ€์—ฌํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

์ฐธ๊ณ 
https://toma0912.tistory.com/75
https://jsonobject.tistory.com/445
https://nyeongnyeong.tistory.com/261

profile
ํ˜ธ๊ธฐ์‹ฌ ๋งŽ์€ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค ๐Ÿ˜

3๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2022๋…„ 11์›” 6์ผ

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ž˜ ๋ณด๊ณ  ๊ฐ‘๋‹ˆ๋‹ค.

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ

thank you!!

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ
comment-user-thumbnail
2024๋…„ 9์›” 23์ผ

???? ์ด์™œ์ง„... ์ž˜๋ณด๊ณ  ๊ฐ‘๋‹ˆ๋‹ค ใ„ทใ„ท!!

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ