1๏ธโฃ ๊ฐ์
Keycloak์ ์ฌ์ฉ์ ์ธ์ฆ๊ณผ ๊ถํ๊ด๋ฆฌ๋ฅผ ์ํ Identity And Access management ์๋ฃจ์
์ด๋ค.
IAM ์๋ฃจ์
์ผ๋ก์จ SSO(SingleSignOn), ์ฌ์ฉ์ Federation ๋ฑ์ ๊ธฐ๋ฅ์ ์ํด์๋ ์ธ์
๋ฐ ํ ํฐ ๊ด๋ฆฌ๋ฅผ ์ดํดํ๋๊ฒ์ด ๋งค์ฐ ์ค์ํ๋ค.
์ด๋ฒ ํฌ์คํ
์์๋ Keycloak์ ์ธ์
๋ฐ ํ ํฐ ๊ด๋ฆฌ์ ๋ํด ๋ค๋ค๋ณด๋ ค๊ณ ํ๋ค.
๋ค์ด๊ฐ๊ธฐ์ ์ ์ธ์ ๊ณผ ํ ํฐ์ ๋ํ ์์ฃผ ๊ฐ๋จํ ๊ฐ๋ ์ ๋ฆฌ๋ฅผ ํด๋ณด์.
๊ตฌ๋ถ | ์ธ์ (์ธ์ฆ) | ํ ํฐ (์ธ์ฆ+์ธ๊ฐ) |
๊ธฐ๋ณธ ๊ฐ๋ |
|
|
์ ์ฅ ์์น | ์๋ฒ ์ธก์ ์ ์ฅ (๋ฉ๋ชจ๋ฆฌ/DB) | ํด๋ผ์ด์ธํธ ์ธก์ ์ ์ฅ (๋ก์ปฌ ์คํ ๋ฆฌ์ง, ์ฟ ํค ๋ฑ) |
์ํ ๊ด๋ฆฌ | ์๋ฒ๊ฐ ์ํ๋ฅผ ์ ์ง (Stateful) | ์๋ฒ๋ ์ํ๋ฅผ ์ ์งํ์ง ์์ (Stateless) |
ํ์ฅ์ฑ | ์๋ฒ ํ์ฅ ์ ์ธ์ ๋๊ธฐํ ๋ฌธ์ ๋ฐ์ ๊ฐ๋ฅ์ฑ O | ์๋ฒ๊ฐ ์ํ๋ฅผ ์ ์งํ์ง ์๊ธฐ ๋๋ฌธ์ ์๋ฒ ํ์ฅ ์ํฅ X |
์ธ์ฆ ๋ฐฉ์ | ์ธ์ ID๋ก ์ฌ์ฉ์ ์๋ณ | ์๋ช ๋ ํ ํฐ์ ์ ํจ์ฑ ๊ฒ์ฆ์ผ๋ก ์ธ์ฆ |
๋ณด์ | ์ธ์ ID ํ์ทจ ์ํ, ์๋ฒ ์ธก์์ ์ธ์ ๋ฌดํจํ ๊ฐ๋ฅ | ์๋ช
์์กฐ ๋ฐฉ์ง, ์ผ๋จ ๋ฐ๊ธ๋ ํ ํฐ์ ๋ง๋ฃ ์ ๊น์ง ๋ฌดํจํ ์ด๋ ค์ |
Keycloak์์์ ์ญํ | ์ฌ์ฉ์์ ๋ก๊ทธ์ธ ์ํ ๊ด๋ฆฌ, SSO ๊ตฌํ | ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์ ์ ๋ณด ๋ฐ ๊ถํ ์ ๊ณต |
๊ธฐํ | UserSession, ClientSession, Single Sign-On Session ... | JWT(JSON Web Token),SAML ํ ํฐ.. Access Token, Refresh Token, ID Token... |
์ด์ Keycloak์์ ์ธ์ ๋ฐ ํ ํฐ์ด ์ด๋ป๊ฒ ์ฌ์ฉ ๋ฐ ๊ด๋ฆฌ๋๋์ง ํ์ธํด๋ณด์.
2๏ธโฃ ์ธ์
์ธ์ ๊ด๋ฆฌ
์ธ์
์ ์๋ฒ์ ์ ์ฅ๋๋ ์ฌ์ฉ์ ์ํ ์ ๋ณด์ด๋ค.
๋ง์ฝ ์ธ์
์ด ์๋ฒ์ ์ ์ฅ๋์ด์์ง ์๋ค๋ฉด, ์ฌ์ฉ์๋ ๋ก๊ทธ์ธ ํ ํ์ด์ง ์ด๋์๋ง๋ค ๋ค์ ๋ก๊ทธ์ธ ํด์ผํ ์๋ ์๋ค.
์ธ์
์ ์ด๋ค ๊ด์ ์์ ๊ด๋ฆฌํด์ผ ํ๋์ง ์ดํด๋ณด์๋ฉด ์๋์ ๊ฐ๋ค.
- ์ฌ์ฉ์ ๊ด์ : ์ธ์ฆ์ฌ๋ถ(๋ก๊ทธ์ธ์ฌ๋ถ), ์ธ์ฆ ๊ธฐ๊ฐ(์ธ์ ๋ง๋ฃ๊ธฐ๊ฐ), ์ฌ์ธ์ฆ ์๊ธฐ ๋ฑ์ ํตํด ์ฌ์ฉ์ ๊ฒฝํ์ ์ํฅ ๋ฏธ์นจ
- ๋ณด์ ๊ด์ : ์ฌ์ฉ์ ํ๋์ ์ถ์ ๋ฐ ์ ์ด (ํ ํฐ ๊ฒ์ฆ/ ๋ฌดํจํ ๋ฑ)
- ์ฑ๋ฅ ๊ด์ : ํ์ฑ ์ธ์ ์ ์ด๋ป๊ฒ ๊ด๋ฆฌํ๋๋์ ๋ฐ๋ผ ์๋ฒ์ ๋ถํ๋ฅผ ์ค ์ ์์
์ธ์ ์ข ๋ฅ
๊ณต์๋ฌธ์์์ ์ ํํ ์ด๋ค ์ธ์
๋ค์ ์ฌ์ฉํ๊ณ ์๋์ง ์ฐพ์๋ณด๋ ค๊ณ ํ์ง๋ง ์ ๋ฆฌ๋์ด์๋๊ฑด ์ฐพ์ง ๋ชปํ๊ณ ,
์ด์ ์ [keycloak ๋ง๋ณด๊ธฐ #7] Production Keycloak์ ์ํ ์ค์ ๋ถ๋ถ์์ Keycloak ๋ค์ค ๋
ธ๋ ํด๋ฌ์คํฐ ์ํคํ
์ณ๋ฅผ ๊ณต๋ถํ ๋, ์๋ ์ธ์
๋ค์ด Embedded ISPN Cache์ ์ ์ฅ๋๋ค๋ ๊ฒ์ ์ธ๊ธํ์ ์ด ์๋ค.
- authenticationSessions: ์ธ์ฆ ํ๋ก์ธ์ค ์ค์ธ ์ธ์ (์ธ์ฆ ํ๋ฆ์ด ์๋ฃ๋์ง ์์ ์ํ์ ์ธ์ , (์: ์ฌ์ฉ์๋ช /๋น๋ฐ๋ฒํธ ์ ๋ ฅ, MFA, ์์ ๋ก๊ทธ์ธ ๋ฑ)์์ ์ฌ์ฉ๋๋ ์์ ์ธ์ )
- sessions: ์ฌ์ฉ์ ์ธ์ (์ธ์ฆ์ด ์๋ฃ๋ ์ฌ์ฉ์์ ์ธ์ , SSO ๊ธฐ๋ฅ์ด ์ด ์ธ์ ์ ๊ธฐ๋ฐ์ผ๋ก ์๋ํจ)
- clientSessions: ํด๋ผ์ด์ธํธ ์ธ์ (ํน์ ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐ๋ ์ธ์ )
Keycloak admin์์ ์ด๋ป๊ฒ ๊ตฌํ๋์ด์๋์ง ํ์ธํด๋ณด์.
- SSO Session Settings
- SSO Session Idle: ์ฌ์ฉ์๊ฐ ํ๋ํ์ง ์์ ๋ ์ธ์ ์ด ์ ์ง๋๋ ์๊ฐ (๊ธฐ๋ณธ๊ฐ 30๋ถ)
- SSO Session Max: ์ฌ์ฉ์ ์ธ์ ์ ์ต๋ ์ ์ง ์๊ฐ (๊ธฐ๋ณธ๊ฐ 10์๊ฐ)
- ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ ํ์ด์ง์ Remember Me ์ต์ ์ด ์๋ ๊ฒฝ์ฐ Idle ์๊ฐ๊ณผ Max ์๊ฐ๋ ๋ณ๋๋ก ์ค์ ๊ฐ๋ฅ
- Client Session Settings
- Client Session Idle: ํน์ ํด๋ผ์ด์ธํธ์ ๋ํ ์ธ์ ์ด ๋นํ์ฑ ์ํ๋ก ์ ์ง๋๋ ์๊ฐ
- Client Session Max: ํด๋ผ์ด์ธํธ ์ธ์ ์ ์ต๋ ์ ์ง ์๊ฐ
- Offline Session Settings
- Offline Session Idle: ์คํ๋ผ์ธ ํ ํฐ ์ฌ์ฉ ์ ์ธ์ ์ด ์ ์ง๋๋ ๋นํ์ฑ ์๊ฐ (๊ธฐ๋ณธ๊ฐ 30์ผ)
- Offline Session Max Limited: ์คํ๋ผ์ธ ์ธ์ ์ ์ต๋ ์ ์ง ์๊ฐ ์ ํ (๊ธฐ๋ณธ์ ์ผ๋ก ๋นํ์ฑํ)
- Login Settings
- Login timeout: ๋ก๊ทธ์ธ ํ๋ก์ธ์ค๊ฐ ์๋ฃ๋์ง ์์ ๊ฒฝ์ฐ ํ์์์ ์๊ฐ (๊ธฐ๋ณธ๊ฐ 30๋ถ)
- Login action timeout: ๋ก๊ทธ์ธ ์ก์ (์: OTP ์ ๋ ฅ)์ ํ์์์ ์๊ฐ (๊ธฐ๋ณธ๊ฐ 5๋ถ)
[์ฐธ๊ณ ] Offline Session ์ด๋?
์คํ๋ผ์ธ ์ธ์
(Offline Session)์ Keycloak์์ ์ ๊ณตํ๋ ํน๋ณํ ์ ํ์ ์ธ์
์ผ๋ก, ๊ณ์ ์ ์ง๋๋ ์ธ์
์ด๋ผ๊ณ ์ดํดํ ์ ์๋ค.
์ค ์ํฉ์์๋ ๋ชจ๋ฐ์ผ ์ฑ ๋์์์ ์ฌ์ฉํ ์ ์๋๋ฐ, ์ฒ์ ๋ก๊ทธ์ธ ํ ๋ช ์ฃผ ํน์ ๋ช ๋ฌ ๋์ ์ฑ์ ์ฌ ๋ก๊ทธ์ธ(์ฌ์ธ์ฆ)ํ์ง ์๊ณ ์ฑ์ ์ฌ์ฉํ ์ ์๋ ์ด์ ๊ฐ ๋ฐฑ๊ทธ๋ผ์ด๋์์ Offline Session์ ์ ์งํ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค. (์ฌ์ฉ์์, IoT์ฅ๋น, ํค์ค์คํฌ ๋ฐ ๊ณต์ฉ ๋จ๋ง๊ธฐ ๋ฑ)
OfflineSession์ ์ํด์๋ OfflineToken์ด ์ฌ์ฉ๋๋ฉฐ, offline_access ์ค์ฝํ๋ฅผ ์์ฒญํ ๋ ๋ฐ๊ธ๋๋ค.
์ธ์ ์ ๊ณ์ธต๊ด๊ณ
์ ์ญ ์ธ์
๊ณผ ํด๋ผ์ด์ธํธ๋ณ ๋ณ๋ ์ธ์
์ ๋๋์ด์ ๊ด๋ฆฌํ ์ ์๋ค.
SSO Session์ ์ ์ญ ์ค์ ์ผ๋ก SSO Session์ด ๋ง๋ฃ๋๋ฉด ๋ชจ๋ Client Session๋ ์๋์ผ๋ก ์ข
๋ฃ๋๋ค.
ClientSession์ ์ข
๋ฃ๋๋๋ผ๋ SSO Session๊ณผ ๋ค๋ฅธ Client Session์ ์ ์ง ๋๋ค.
- SSO Session (์์ ๋ ๋ฒจ)
- ์ฌ์ฉ์์ ์ ์ฒด ์ธ์ฆ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ์ธ์
- Keycloak ์๋ฒ์์ ๊ด๋ฆฌ๋๋ ์ค์ ์ง์ค์ ์ธ์
- ์ฌ๋ฌ ํด๋ผ์ด์ธํธ์ ๊ฑธ์ณ ๊ณต์ ๋จ
- Client Session (ํ์ ๋ ๋ฒจ)
- ํน์ ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์ธ์
- SSO Session์ ์ข ์๋จ
- ๊ฐ ํด๋ผ์ด์ธํธ๋ณ๋ก ๋ณ๋ ์์ฑ๋จ
์๋ฅผ๋ค์ด Keycloak์ ๋ก๊ทธ์ธํ ํ ์ ํ๋ฆฌ์ผ์ด์
(A, B, C)์ ๋ก๊ทธ์ธํ๋ฉด
ํ๋์ SSO Session๊ณผ ๊ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ํ ์ธ ๊ฐ์ Client Session์ด ์์ฑ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์
A์์ ๋ก๊ทธ์์ํด๋ SSO Session์ ์ ์ง๋๋ฉฐ, B์ C์๋ ์ฌ์ ํ ๋ก๊ทธ์ธ๋ ์ํ์ด๋ค.
SSO Session์ด ํ์์์๋๊ฑฐ๋ ๋ช
์์ ์ผ๋ก ์ข
๋ฃ๋๋ฉด ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์
(A, B, C)์์ ๋ก๊ทธ์์๋๋ ๊ฒ ์ด๋ค.
์ธ์ ํ์ธ ๋ฐ ์ข ๋ฃํ๊ธฐ
ํ ์คํธ ์ฌ์ฉ์๋ก ๋ก๊ทธ์ธ(http://localhost:8082/realms/my-LDAP/account/) ํ ํ์ธํด๋ณด์.
๊ด๋ฆฌ์ ํ์ด์ง์์ Sessionํญ์ ํ์ธํ๋ฉด Realm๋ด ์ธ์ ์ ๋ณด๋ฅผ ๋ชจ๋ ํ์ธํ ์ ์๋ค.
Actions ์์ Revocation, Sign out all active sessions๋ฅผ ์ํํ ์ ์๋ค.
- Sign out all active sessions (๋ชจ๋ ํ์ฑ ์ธ์
๋ก๊ทธ์์):
- ๋ชจ๋ ํ์ฑ ์ธ์ ์ ๋ก๊ทธ์์ ์ฒ๋ฆฌํจ
- ๋ชจ๋ ๋๋ฐ์ด์ค์ ๋ธ๋ผ์ฐ์ ์์ ๋ก๊ทธ์์๋๋ฉฐ, ์ฌ์ฉ์๋ ๋ค์ ๋ก๊ทธ์ธํ๋ฉด ์ ์ธ์ ์ ์์ํ ์ ์์
- Revocation (์ธ์
ํด์ง/ ๋ ๊ฐ๋ ฅํ ์ ์ด):
- ์ธ์ ๋ฟ๋ง ์๋๋ผ ๊ด๋ จ๋ ํ ํฐ๋ ํด์ง(๋ฌดํจํ)ํจ
- ๋ ๊ฐ๋ ฅํ ์กฐ์น๋ก, ์ด๋ฏธ ๋ฐ๊ธ๋ ํ ํฐ(๋ฆฌํ๋ ์ ํ ํฐ ํฌํจ)์ ๋ฌดํจํํจ
- ์คํ๋ผ์ธ ํ ํฐ๊ณผ ๊ฐ์ ์ฅ๊ธฐ ํ ํฐ๋ ํด์งํ ์ ์์
- ์ ์์ ์ธ ์ ๊ทผ์ด ์์ฌ๋ ๋ ์ ์ฉํ ๋ณด์ ์กฐ์น
Clients > Sessionsํญ์์ Client๋ณ ์ธ์ ๋ ๋ณ๋๋ก ํ์ธํ ์ ์๋ค.
Clients Session ๋ชฉ๋ก์ ํ์ธํ ์ ์๊ณ , Actions์์ Clients Session์ ์ญ์ ํ ์ ์๋ค.
Users > Sessionํญ์์ ์ฌ์ฉ์๋ณ ์ธ์ ์ ํ์ธํ ์ ์๋ค.
Actions๋ฅผ ๋ณด๋ฉด Impersonate, Delete๋ฅผ ์ํํ ์ ์๋๋ฐ Impersonate์ด ์ข ํน์ดํ๋ค.
- Impersonate (๊ฐ์ฅํ๊ธฐ):
- ๊ด๋ฆฌ์๊ฐ ํด๋น ์ฌ์ฉ์๋ก ๊ฐ์ฅํ์ฌ ์์คํ ์ ์ฒดํํ ์ ์๋ ๊ธฐ๋ฅ
- ์ฌ์ฉ์๊ฐ ๊ฒฝํํ๋ ํ๋ฉด์ด๋ ๊ถํ์ ๊ทธ๋๋ก ํ์ธํ ์ ์์ด ๋ฌธ์ ํด๊ฒฐ์ด๋ ํ ์คํธ์ ์ ์ฉ
- ๊ด๋ฆฌ์๋ ์ฌ์ฉ์์ ๋์ ์์ด ํด๋น ๊ณ์ ์ผ๋ก ํ๋ํ ์ ์์ผ๋ฏ๋ก ๋ณด์์ ์ฃผ์๊ฐ ํ์ํจ
HTTP ์ฟ ํค์ ์ธ์
HTTP๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฌด์ํ(stateless) ํ๋กํ ์ฝ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ ์์ฒญ์ ๋
๋ฆฝ์ ์ด๋ฉฐ ์ด์ ์์ฒญ๊ณผ์ ์ฐ๊ด์ฑ์ ์ ์งํ์ง ์๋๋ค.
Stateless ํ๋กํ ์ฝ์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ์ฌ ์ฌ์ฉ์์ ๋ก๊ทธ์ธ ์ํ๋ฅผ ์ ์งํ๊ณ ์ธ์
๊ธฐ๋ฐ์ ์ธ์ฆ ์์คํ
์ ๊ตฌํ(์ฌ์ฉ์์ ๋ก๊ทธ์ธ ์ํ๋ฅผ ์ ์ง) ํ๊ธฐ ์ํด ์ฟ ํค๋ฅผ ํ์ฉํ๋ค.
- ์ธ์
(Session): Keycloak์์ ์ธ์
์ ์๋ฒ ์ธก์ ์ ์ฅ๋๋ ์ฌ์ฉ์์ ์ธ์ฆ ์ํ
- AUTH_SESSION_ID: ์ธ์ฆ ํ๋ก์ธ์ค ์ค์ธ ์ธ์ ์ ๋ํ๋ด๋ฉฐ, ๋ก๊ทธ์ธ ์งํ ์ค์ผ ๋ ์ฌ์ฉ๋จ
- KEYCLOAK_IDENTITY: ์ฌ์ฉ์์ ์ ์ ์ ๋ณด๋ฅผ ํฌํจํ๋ ์ธ์ ๋ฐ์ดํฐ
- KEYCLOAK_SESSION: ์ฌ์ฉ์์ ๋ก๊ทธ์ธ ์ํ๋ฅผ ์ ์งํ๋ ๋ฉ์ธ ์ธ์ ์๋ณ์
- ์ด๋ฌํ ์ธ์ ์ ๋ณด๋ Keycloak ์๋ฒ์ ์บ์(์ผ๋ฐ์ ์ผ๋ก Infinispan)์ ์ ์ฅ๋ฉ๋๋ค.
- ์ฟ ํค (Cookies): ์ฟ ํค๋ ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ ) ์ธก์ ์ ์ฅ๋๋ ์ ๋ณด๋ก, ์ธ์
๊ณผ ์ฐ๊ฒฐํ๋ ์ญํ ์ ํ๋ค.
- ๋ธ๋ผ์ฐ์ ๋ Keycloak ์๋ฒ์์ ๋ฐ์ ์ฟ ํค๋ฅผ ์ ์ฅํฉ๋๋ค.
- ์ฟ ํค์๋ ์ธ์ ID๊ฐ ํฌํจ๋์ด ์์ด์ ์๋ฒ๊ฐ ์ฌ์ฉ์์ ์ธ์ ์ ์๋ณํ ์ ์๋ค.
- ์ด๋ฏธ์ง์์ ๋ณด์ด๋ ์ฟ ํค๋ค(AUTH_SESSION_ID, KEYCLOAK_IDENTITY, KEYCLOAK_SESSION)์ ์๋ฒ์ ํด๋น ์ธ์ ์ ์ฐธ์กฐํ๋ค.
์ธ์ฆ ๊ณผ์ ์์๋ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ์๋ํ๋ฉด AUTH_SESSION_ID ์ฟ ํค๊ฐ ์์ฑ๋๊ณ , ์ธ์ฆ์ด ์๋ฃ๋๋ฉด KEYCLOAK_SESSION๊ณผ KEYCLOAK_IDENTITY ์ฟ ํค๊ฐ ์ค์ ๋๋ค.
์ธ์ ์ ์ง๋ฅผ ์ํด์ ๋ธ๋ผ์ฐ์ ๋ ์์ฒญ๋ง๋ค ์ฟ ํค๋ฅผ Keycloak ์๋ฒ์ ๋ณด๋ด๊ณ , ์๋ฒ๋ ์ฟ ํค์ ์ธ์ ID๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฅ๋ ์ธ์ ์ ๋ณด๋ฅผ ์กฐํํ๋ค. ์ด๋, ์ธ์ ์ด ์ ํจํ๋ฉด ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ , ๋ง๋ฃ๋๋ฉด ์ฌ์ธ์ฆ์ ์๊ตฌํ๋ค.
์ฌ๊ธฐ์ HttpOnly ํ๋๊ทธ๋ฅผ ํตํด ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํตํ ์ ๊ทผ์ ๋ฐฉ์งํ๊ณ ,
Secure ํ๋๊ทธ๋ฅผ ํตํด HTTPS ์ฐ๊ฒฐ์์๋ง ์ฟ ํค๊ฐ ์ ์ก๋๋๋ก ํ๋ค.
3๏ธโฃ ํ ํฐ
ํ ํฐ ๊ฐ์
ํ ํฐ๊ณผ ์ธ์
์ ์ฐ๊ด๊ด๊ณ๋ฅผ ์ดํด๋ณด์๋ฉด,
์ฌ์ฉ์ ๋ก๊ทธ์ธ์ผ๋ก ์ฌ์ฉ์์ธ์ฆ์ด ์๋ฃ๋๋ฉด ํ ํฐ๋ฐ๊ธ๊ณผ ๋์์ ์ธ์
์ด ์์ฑ๋๋ฉฐ, ์ฌ์ฉ์(=๋ธ๋ผ์ฐ์ )์ ํ ํฐ๊ณผ ์ฟ ํค(=์ธ์
)๊ฐ์ด ์ ๋ฌ๋๋ค.
์ธ์
์ด ๋ฌดํจํ๋๋ฉด ํด๋น ์ธ์
์ผ๋ก ๋ฐ๊ธ๋ ํ ํฐ๋ ๊ฒ์ฆ ์ ๋ฌดํจํ๋ ์ ์๋ค.
์ผ๋ฐ์ ์ผ๋ก ํ ํฐ์ ์ ํจ์๊ฐ์ ์ ์งง๊ฒ ์ค์ ํ๋ ๊ฒ์ด ๋ณด์์ ์ ๋ฆฌํ๋ค. AccessToken์ ๊ฒฝ์ฐ ๋ณดํต 5-15๋ถ ์ ๋๋ก ์ค์ ํ๋ค.
๊ทธ ์ด์ ๋ ์งง์ ์๋ช
์ ํ ํฐ์ด ํ์ทจ๋๋๋ผ๋ ์
์ฉ ๊ฐ๋ฅํ ์๊ฐ์ ์ ํํ๋ฉฐ, Refresh Token์ ํตํด ์๋ก์ด Access Token์ ์ป์ ์ ์์ผ๋ฏ๋ก ์ฌ์ฉ์ ๊ฒฝํ์ ํฐ ์ํฅ ์๊ธฐ ๋๋ฌธ์ด๋ค.
ํ ํฐ ์ ํจ์๊ฐ์ด ๋๋ฌด ์งง์ผ๋ฉด ์๋ฒ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์ ์๊ณ , ๋๋ฌด ๊ธธ๋ฉด ํ์ทจ ์ํ์ด ์กด์ฌํ๋ ์ผ๋ฐ์ ์ธ ๊ถ์ฅ์ฌํญ์ ๊ธฐ์ค์ผ๋ก ์ค์ ํ๊ณ ,
ํ์ํ ๊ฒฝ์ฐ์๋ง ์ปค์คํ
ํ๋๊ฒ์ด ์ข๋ค.
ํ ํฐ ์ข ๋ฅ
Keycloak์์์ ํ ํฐ์ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ(์ธ์ฆ)์ ์ฑ๊ณตํ ํ ๋ฐ๊ธ๋ฐ๋ ์ธ์ฆ/์ธ๊ฐ ํฐ์ผ์ด๋ผ๊ณ ํ ์ ์๋ค.
์๋ฅผ๋ค์ด ๋์ด๊ณต์์ ์ธ์ ์
์ฅ ๊ฐ๋ฅํ์ง, ์ด๋ค ๋์ด๊ธฐ๊ตฌ๋ฅผ ํ ์ ์๋์ง ๋ฑ์ด ์ ์ธ ํฐ์ผ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ดํดํ๊ธฐ ์ฝ๋ค.
ํ ํฐ์ OAuth 2.0๊ณผ OpenID Connect(OIDC) ํ๋กํ ์ฝ์์ ์ฌ์ฉ๋๋ฉฐ, ์๋์ ๊ฐ์ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค.
๊ตฌ๋ถ | ID Token | Access Token | Refresh Token |
๋ชฉ์ | ์ฌ์ฉ์์ ์ ์(identity) ์ฆ๋ช
์ฌ์ฉ์๊ฐ ๋๊ตฌ์ธ์ง ์ฆ๋ช ํ๋ ํ ํฐ OpenID Connect ํ๋กํ ์ฝ์ ํต์ฌ ์์ |
์์์ ๋ํ ์ ๊ทผ ๊ถํ ์ฆ๋ช
ํน์ ๋ฆฌ์์ค๋ API์ ์ ๊ทผํ ์ ์๋ ๊ถํ์ ๋ํ๋ OAuth 2.0 ํ๋กํ ์ฝ์ ํต์ฌ ์์ |
์๋ก์ด ์ก์ธ์ค ํ ํฐ์ ์ป๊ธฐ ์ํ ํ ํฐ ์ก์ธ์ค ํ ํฐ์ด ๋ง๋ฃ๋์์ ๋ ์ ํ ํฐ์ ๋ฐ๊ธ๋ฐ๋ ์ฉ๋ ์ฌ์ฉ์๊ฐ ๋ค์ ๋ก๊ทธ์ธํ ํ์ ์์ด ์ธ์ฆ ์ํ๋ฅผ ์ ์ง |
ํฌํจ ์ ๋ณด | ์ฌ์ฉ์ ID, ์ด๋ฆ, ์ด๋ฉ์ผ ๋ฑ ์ฌ์ฉ์ ํ๋กํ ์ ๋ณด, ํ ํฐ ๋ฐ๊ธ์, ๋์ ํด๋ผ์ด์ธํธ, ๋ง๋ฃ ์๊ฐ |
์ฌ์ฉ์ ๊ถํ(roles, scopes) ํ ํฐ ๋ฐ๊ธ์, ๋์ ์๋น์ค, ๋ง๋ฃ ์๊ฐ |
๋ณดํต ์ฌ์ฉ์ ์๋ณ ์ ๋ณด์ ๋ฒ์(scope) ์ ๋ณด ํ ํฐ ๋ฐ๊ธ์, ๋์ ํด๋ผ์ด์ธํธ, ๋ง๋ฃ ์๊ฐ |
์ฉ๋ | ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์
์ด ๋ก๊ทธ์ธํ ์ฌ์ฉ์๋ฅผ ์๋ณ ์ฃผ๋ก ์ธ์ฆ(Authentication) ๋จ๊ณ์์ ์ฌ์ฉ |
๋ณดํธ๋ API๋ ๋ฆฌ์์ค ์๋ฒ์ ์ ๊ทผํ ๋ ์ฌ์ฉ ์ฃผ๋ก ์ธ๊ฐ(Authorization) ๋จ๊ณ์์ ์ฌ์ฉ API ์์ฒญ ์ Authorization ํค๋์ ํฌํจ๋จ |
์ก์ธ์ค ํ ํฐ์ ์๋ช
์ ์งง๊ฒ ์ ์งํ๋ฉด์๋ ์ฌ์ฉ์ ๊ฒฝํ ๋ณด์ฅ ํด๋ผ์ด์ธํธ๋ ๋ฆฌํ๋ ์ ํ ํฐ์ ์๋ฒ์ ์ ์ถํ์ฌ ์ ์ก์ธ์ค ํ ํฐ์ ์์ฒญ ์ผ๋ฐ์ ์ผ๋ก ์ก์ธ์ค ํ ํฐ๋ณด๋ค ๊ธด ์๋ช (hours, days)์ด๋, Refresh Token Rotation ์ฌ์ฉ ๊ฐ๋ฅ ํด๋ผ์ด์ธํธ์ ์์ ํ๊ฒ ์ ์ฅ๋์ด์ผ ํจ ์๋ฒ ์ธก์์ ์ทจ์ ๊ฐ๋ฅ |
ํ ํฐ์ ์ด์ ์ ์ ๋ฆฌํ ํฌ์คํ
[keycloak ๋ง๋ณด๊ธฐ #2] OpenID Connection ์ฌ์ฉ์ ์ธ์ฆ ์ดํดํ๊ธฐ ์์ ๋ค๋ฃจ๊ณ ์์ผ๋,
์ดํด ์ด๋ ค์ด ๋ถ๋ถ์ ๋ณด๊ณ ์ดํดํ๊ณ ๋ค์ ์ค์!
ํ ํฐ ์ค์ (Lifespan ๋ฑ)
Keycloak Realm Settings์์ Tokens ์ค์ ์์ ์ด ๊ฐ๋ฅํ๋ค.
- General (์ผ๋ฐ ํ ํฐ ์ค์ )
- Default Signature Algorithm: ํ ํฐ ์๋ช ์ ์ฌ์ฉ๋๋ ๊ธฐ๋ณธ ์๊ณ ๋ฆฌ์ฆ (RS256 ์ค์ )
- OAuth 2.0 Device Code Lifespan: ์ฅ์น ์ธ์ฆ ์ฝ๋์ ์ ํจ ๊ธฐ๊ฐ (10๋ถ)
- OAuth 2.0 Device Polling Interval: ์ฅ์น ์ธ์ฆ ํด๋ง ๊ฐ๊ฒฉ (5์ด)
- Short verification_uri in Device Authorization flow: ์ฅ์น ์ธ์ฆ ํ๋ฆ์์ ์งง์ ํ์ธ URI ์ฌ์ฉ
- Lifetime of the Request URI for Pushed Authorization Request: ํธ์๋ ์ธ๊ฐ ์์ฒญ์ ์์ฒญ URI ์๋ช (1๋ถ)
- Refresh tokens
- Revoke Refresh Token: ๋ฆฌํ๋ ์ ํ ํฐ ์ฌ์ฉ ํ ํด์ง ์ฌ๋ถ (๋นํ์ฑํ๋จ).
(ํ์ฑํํ๋ฉด ๋ฆฌํ๋ ์ ํ ํฐ์ ํ ๋ฒ๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉฐ, ์ ์ก์ธ์ค ํ ํฐ์ ์ป์ ๋ ์ ๋ฆฌํ๋ ์ ํ ํฐ์ด ๋ฐ๊ธ๋จ)
- Revoke Refresh Token: ๋ฆฌํ๋ ์ ํ ํฐ ์ฌ์ฉ ํ ํด์ง ์ฌ๋ถ (๋นํ์ฑํ๋จ).
- Access tokens
- Access Token Lifespan: ์ผ๋ฐ ์ก์ธ์ค ํ ํฐ์ ์ ํจ ๊ธฐ๊ฐ (5๋ถ ๊ถ์ฅ)
- Access Token Lifespan For Implicit Flow: OAuth 2.0 ์๋ฌต์ ํ๋ฆ์์ ์ฌ์ฉ๋๋ ์ก์ธ์ค ํ ํฐ์ ์ ํจ ๊ธฐ๊ฐ (15๋ถ ์ค์ )
- Client Login Timeout: ํด๋ผ์ด์ธํธ๊ฐ ๋ก๊ทธ์ธ์ ์๋ฃํด์ผ ํ๋ ์ ํ ์๊ฐ (1๋ถ ์ค์ )
- Action tokens
- User-Initiated Action Lifespan: ์ฌ์ฉ์๊ฐ ์์ํ ์์ ํ ํฐ์ ์ ํจ ๊ธฐ๊ฐ (5๋ถ)
- Default Admin-Initiated Action Lifespan: ๊ด๋ฆฌ์๊ฐ ์์ํ ์์ ํ ํฐ์ ๊ธฐ๋ณธ ์ ํจ ๊ธฐ๊ฐ (12์๊ฐ)
- Email Verification: ์ด๋ฉ์ผ ํ์ธ ๋งํฌ์ ์ ํจ ๊ธฐ๊ฐ
- IdP account email verification: ์ธ๋ถ ID ์ ๊ณต์ ๊ณ์ ์ด๋ฉ์ผ ํ์ธ์ ์ ํจ ๊ธฐ๊ฐ
- Forgot password: ๋น๋ฐ๋ฒํธ ์ฌ์ค์ ๋งํฌ์ ์ ํจ ๊ธฐ๊ฐ
- Execute actions: ํ์ ์์ ์คํ ๋งํฌ์ ์ ํจ ๊ธฐ๊ฐ
ํน์ Client๋ณ๋ก Access Token์ ์ ํจ์๊ฐ์ ์ปค์คํ ํ ์ ์๋ค.
4๏ธโฃ ์ธ์ , ์ฟ ํค, ํ ํฐ Keycloak SSO ํ๊ฒฝ์์์ ์ํธ์์ฉ
- ์ด๊ธฐ ์ ๊ทผ ๋ฐ ์ธ์ฆ:
- ์ฌ์ฉ์๊ฐ A ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ทผํ๋ฉด Keycloak์ผ๋ก ๋ฆฌ๋ค์ด๋ ํธ
- ์ฌ์ฉ์ ์ธ์ฆ ํ Keycloak ์๋ฒ์ ์ธ์ ์ด ์์ฑ๋๊ณ ํ ํฐ ๋ฐ๊ธ
- ์ฟ ํค ์ค์ ๋ฐ ๋ฆฌ๋ค์ด๋ ํธ:
- Keycloak์ ๋ธ๋ผ์ฐ์ ์ ์ธ์ ์ฟ ํค๋ฅผ ์ค์ ํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ๋ฆฌ๋ค์ด๋ ํธ
- ํ ํฐ(ID Token, Access Token, Refresh Token)์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฌ
- ์ ํ๋ฆฌ์ผ์ด์
์ ๊ทผ:
- A ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ํฐ์ ๊ฒ์ฆํ๊ณ ์ฌ์ฉ์์๊ฒ ๋ฆฌ์์ค๋ฅผ ์ ๊ณต
- ๋ค๋ฅธ ์ฑ SSO ์ ๊ทผ:
- ์ฌ์ฉ์๊ฐ B ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ทผํ๋ฉด Keycloak์ ์ฟ ํค๋ฅผ ํตํด ๊ธฐ์กด ์ธ์ ํ์ธ
- ์ฌ์ธ์ฆ ์์ด B ์ ํ๋ฆฌ์ผ์ด์ ์ฉ ํ ํฐ์ด ๋ฐ๊ธ๋์ด SSO ๊ตฌํ
- ํ ํฐ ๊ฐฑ์ :
- Access Token์ด ๋ง๋ฃ๋๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ Refresh Token์ ์ฌ์ฉํด ์ ํ ํฐ์ ์์ฒญ
- ์ธ์
์ข
๋ฃ:
- ๋ก๊ทธ์์ ์ Keycloak์ ์ธ์ ์ ์ข ๋ฃํ๊ณ ๋ชจ๋ SSO ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ฆผ