Keycloak은 오픈소스 인증 및 권한 부여 관리 솔루션입니다.
이를 통해 SSO(Single Sign-On) 기능을 손쉽게 구현할 수 있으며, 기업의 애플리케이션과 사용자 관리가 더욱 편리해집니다.
특히, Keycloak은 다양한 프로토콜을 지원하여 OAuth2, OpenID Connect, SAML2와 같은 표준 기반의 인증 방식을 사용할 수 있어 많은 시스템과의 연동이 가능합니다.
이외에도 소셜 로그인, MFA(다단계 인증), 사용자 연동 관리 등 여러 기능을 제공합니다.
| 용어 | 설명 |
|---|---|
| OIDC | OAuth가 권한 부여만 다루는 것이라면 OIDC는 OAuth 를 포함하여 인증과 권한부여를 모두 포함한 것이다. |
| SSO의 구현을 위한 수단으로 사용된다. | |
| Realm | 인증, 권한 부여가 적용되는 범위를 나타내는 단위이다. |
| SSO를 적용한다고 했을 때 해당 SSO가 적용되는 범위는 Realm 단위이다. | |
| Client | 인증, 권한 부여 행위를 대행하도록 맡길 애플리케이션을 나타내는 단위이다. |
| 그 단위는 웹사이트 혹은 REST API를 제공하는 서비스도 될 수 있다. 하나의 Realm에 n개의 Client를 생성, 관리할 수 있다. | |
| User | Client에 인증을 요청할 사용자를 나타낸다. 하나의 Realm에는 Realm에 종속된 n개의 User를 생성, 관리할 수 있다. |
| 기본적으로 User는 Username, Email, FirstName, LastName으로 구성되어 있지만 Custom User Attribute를 사용하면 원하는 속성을 추가할 수 있다. | |
| Role | User에게 부여할 권한 내용을 나타낸다. |
| 여기에는 Keycloak의 REST API를 사용할 권한을 부여할 수 있고 사용자가 정의한 권한을 부여할 수도 있다. |
Docker Compose로 PostgresSQL과 Keycloak 서버를 설치합니다.
services:
postgres:
image: postgres
container_name: postgres-keycloak
restart: unless-stopped
environment:
POSTGRES_DB: keycloak
POSTGRES_USER: keycloak
POSTGRES_PASSWORD: _aA123456
PGDATA: /var/lib/postgresql/data
volumes:
- postgres-keycloak-data:/var/lib/postgresql
ports:
- '3998:5432'
networks:
- keycloak-net
keycloak:
image: quay.io/keycloak/keycloak
container_name: keycloak
restart: unless-stopped
environment:
# 개발용 관리자 계정 (dev 모드에서 편리)
KEYCLOAK_ADMIN: admin
KEYCLOAK_ADMIN_PASSWORD: admin
# DB 설정
KC_DB: postgres
KC_DB_URL: jdbc:postgresql://postgres-keycloak:5432/keycloak
KC_DB_USERNAME: keycloak
KC_DB_PASSWORD: _aA123456
# Optional: 호스트명/포워딩 설정 (리버스 프록시 뒤에 둘 경우)
KC_HOSTNAME_STRICT: "false"
KC_PROXY_HEADERS: xforwarded
PROXY_ADDRESS_FORWARDING: "true"
KEYCLOAK_FRONTEND_URL: <https://keycloak.code-factory.co.kr>
command:
- start-dev
ports:
- '3300:8080'
depends_on:
- postgres
volumes:
- keycloak-data:/opt/keycloak/data
# realm 자동 임포트용 (선택)
# - ./import/realms:/opt/keycloak/data/import
networks:
- keycloak-net
volumes:
postgres-keycloak-data:
keycloak-data:
networks:
keycloak-net:
웹브라우저 주소창에 localhost:3200을 입력하고 접속해 봅니다. 접속이 잘 된다면 admin/admin 으로 로그인 합니다.
