Keycloak과 외부 시스템 연동
1️⃣ LDAP / Active Directory 연동
1. Keycloak과 LDAP 연동 개요
Keycloak은 외부 디렉토리 서버(예: OpenLDAP, Microsoft AD)와 쉽게 연동할 수 있도록 User Federation 기능을 제공합니다.
🔧 이 기능을 통해 Keycloak 내부 DB가 아닌 LDAP에 있는 사용자 계정으로 로그인할 수 있습니다.
2. 아키텍처 구조
+---------------------+
| 사용자 로그인 |
+---------------------+
|
v
+----------------------+ +-----------------+
| Keycloak |<-----> | LDAP / AD 서버 |
| (User Federation) | | (Read Only) |
+----------------------+ +-----------------+
3. 설정 방법 (예: Active Directory)
- Keycloak Admin 콘솔 →
User Federation
클릭 Add provider
→ldap
선택- 주요 설정 값 입력:
항목 | 예시 |
---|---|
Connection URL | ldap://ad.example.local:389 |
Bind DN | CN=admin,CN=Users,DC=example,DC=local |
Bind Credential | 비밀번호 |
Users DN | CN=Users,DC=example,DC=local |
- Test connection 및 Test authentication 실행
- Sync Now로 사용자 동기화
4. 참고
- 기본적으로 LDAP는 읽기 전용 (쓰기 가능은 별도 설정 필요)
import users
여부 설정 가능 (Keycloak DB에 복사 or 실시간 조회)
2️⃣ SAML 2.0 IDP 연동
1. Keycloak을 SP(Service Provider)로 사용하는 SAML 연동
기존 회사의 SAML 기반 IDP(예: ADFS, Okta) 와 연동해 SSO(Single Sign-On) 환경을 구축할 수 있습니다.
2. 아키텍처
+---------+ SAML Request +----------------+
| Browser | --------------------> | External IDP |
| | <-------------------- | (SAML IDP) |
| | SAML Response +----------------+
| |
| | JWT Token +----------------+
| +---------------------> | Keycloak |
+-------------------------------->+ Application |
3. 설정 절차
- Keycloak에서 SAML Client 생성
- Client Protocol:
saml
- IDP 메타데이터 URL 등록
- 외부 SAML IDP에서 Keycloak SP 메타데이터 등록
Keycloak 제공 메타데이터 URL 예:
https://keycloak.example.com/auth/realms/{realm}/protocol/saml/descriptor
- 사용자 속성 매핑
- SAML Assertion → Keycloak User Attribute
4. 실습 예제 (ADFS)
- ADFS에서 Relying Party Trust 설정
- Keycloak에서
client_id
,Assertion Consumer URL
설정 - NameID →
username
, Attribute →email
등 매핑
3️⃣ Keycloak as IDP (OAuth2 / OIDC / SAML)
1. Keycloak을 IDP로 사용하기
Keycloak은 자체적으로 IDP(Identity Provider) 기능을 제공하므로, 다른 시스템이 Keycloak을 통해 사용자 인증을 위임할 수 있습니다.
- 지원 프로토콜:
✅ OIDC
✅ OAuth2
✅ SAML 2.0
2. 아키텍처 다이어그램 (OIDC)
+----------+ +------------+ +------------+
| Client | --(AuthZ)--> | Keycloak | --(Token)--> | Resource |
| | | (IDP) | | Server |
+----------+ +------------+ +------------+
3. 실습 예제 (OIDC 기반)
🔧 1. Keycloak Client 등록
- Protocol:
openid-connect
- Access Type:
confidential
- Redirect URI:
https://app.example.com/callback
🔧 2. 외부 애플리케이션 설정
- Client ID / Secret 사용
- Authorization Code Flow 구성
- 예:
https://keycloak.example.com/auth/realms/myrealm/protocol/openid-connect/auth?...
4. OIDC 응답 예시
{
"access_token": "eyJhbGciOiJIUzI1NiIs...",
"id_token": "eyJraWQiOiJ3MzI4...",
"expires_in": 300
}
5. Keycloak as SAML IDP
다른 서비스(SP)가 Keycloak을 통해 인증 받도록 설정 가능
- SAML Endpoint:
https://keycloak.example.com/auth/realms/{realm}/protocol/saml
- Keycloak에 SP 등록
- 메타데이터 교환 (SP ↔ Keycloak)
🔚 요약
목적 | Keycloak 역할 | 주요 설정 |
---|---|---|
LDAP 연동 | 외부 사용자 정보 읽기 | User Federation |
외부 IDP 연동 (SAML) | SP | SAML Client 생성 |
외부 앱에서 인증 위임 | IDP | OIDC/SAML Client 사용 |
마지막 수정일자