Realm, Client, Role, User 구조

Realm, Client, Role, User 구조

1️⃣ Realm: 멀티 테넌시 개념

1. Realm이란?

Realm은 Keycloak에서 인증 및 권한 부여를 독립적으로 관리할 수 있는 보안 도메인입니다. 하나의 Keycloak 서버에서 여러 개의 Realm을 만들 수 있으며, 서로 완전히 격리됩니다.

🔐 한 Realm의 사용자, 클라이언트, 역할은 다른 Realm과 공유되지 않습니다.

2. 주요 활용 시나리오

  • 회사 A, B 고객사 분리 운영
  • Dev / Staging / Production 환경 분리
  • SaaS 다중 테넌시 구조

3. 시각적 구조

[Keycloak Server]
├── Master Realm (관리용)
├── CompanyA-Realm
│   ├── Users
│   ├── Clients
│   └── Roles
└── CompanyB-Realm
    ├── Users
    ├── Clients
    └── Roles

2️⃣ Client: 어플리케이션 등록과 Client Type

1. Client란?

Keycloak에서 Client는 인증을 필요로 하는 애플리케이션 또는 서비스를 의미합니다.

  • 웹 앱, 모바일 앱, 백엔드 API 서버 등
  • Keycloak과 통신하며 로그인/토큰을 처리

2. Client Type 종류

타입 설명
public 비밀 키 없이 접근. 프론트엔드 앱에 적합 (e.g. React)
confidential 클라이언트 시크릿 필요. 백엔드 서버, API 서버 등
bearer-only 로그인 UI 없이 토큰만 검증. API Gateway에 적합

3. 예시

[Client: my-app]
  ↓ 요청
[Keycloak: 인증 & 토큰 발급]
  ↓ 토큰 전달
[my-app 내부: 사용자 정보 확인]

3️⃣ Role: Realm Role vs Client Role

1. Role이란?

사용자 또는 그룹에게 할당할 수 있는 권한/역할을 정의합니다. RBAC (Role-Based Access Control)의 핵심 요소입니다.

2. Role의 종류

종류 설명
Realm Role 전체 Realm 수준에서 공통 사용 (e.g., admin, user)
Client Role 특정 Client 전용 역할 (e.g., my-api.admin)

🔄 사용자에게 Realm Role과 Client Role을 동시에 할당할 수 있습니다.

3. 구조 예시

[User: Alice]
 ├── Realm Roles: admin
 └── Client Roles:
     └── my-api: reader

🖼️ Role 할당 플로우

[User] ← (할당) ← [Realm Role] / [Client Role]
[Token에 포함됨]
[Application에서 권한 확인]

4️⃣ User: 속성, 그룹, Credential 구조

1. User 구조

Keycloak의 사용자 객체는 다음과 같은 요소로 구성됩니다:

  • 기본 정보: ID, 이메일, 이름
  • 속성 (Attributes): 추가 사용자 정의 정보
  • 자격 증명 (Credential): 비밀번호, OTP, WebAuthn
  • 역할: Realm/Client 역할
  • 그룹: 사용자 그룹으로 Role 묶음 구성 가능

2. 사용자 속성 구조 예시

{
  "username": "alice",
  "email": "alice@example.com",
  "attributes": {
    "department": ["engineering"],
    "employeeId": ["A123"]
  }
}

3. 사용자 → 그룹 → 역할 예시

[User: Bob]
   └── Group: dev-team
         └── Role: my-app.developer

🖼️ 사용자 인증과 역할 구조

+------------+
|   User     |
+------------+
      ↓ 로그인
+------------+
| Credentials|
+------------+
      ↓ 인증 성공
+------------+
| Assigned Roles (Realm + Client) |
+------------+
+------------+
| Access Token (JWT) |
+------------+

🔚 요약

구성 요소 설명 예시
Realm 멀티 테넌시 분리 단위 dev-realm, prod-realm
Client 인증 대상 앱/서비스 frontend-app, api-service
Role 권한 부여 단위 admin, viewer, api.editor
User 최종 사용자 alice, bob

RSS Feed
마지막 수정일자