---
title: "Keycloak 용어 정리"
date: "2022-06-12"
tags: ["TIL","Keycloak"]
status: archived
verified: false
---

2022년 Keycloak을 학습하며 Realm, Client 등 기본 용어와 인증 흐름을 정리한 기록입니다. 인증 시스템을 처음 접하면서 구성 요소의 역할을 구분하고 전체 흐름을 이해하려고 작성했습니다. 현재 Keycloak 버전과 설정 방식은 다를 수 있으므로 당시의 학습 기록으로 참고해주세요.

## Keycloak 용어 정리

회사에서 SSO 연동작업을 하며 사용한 Keycloak에 대한 기본 용어 정리

**Realm**

-   **SSO를 사용하는 Client(앱, 서비스)들을 포함하는 관리 단위**

**Clients(서비스)**

-   **Realm** 안에 포함된 개별적인 앱들(frontend, backend, …)
-   인증은 각 클라이언트에서 keycloak 서버로 인증요청을 해서 수행
    -   keycloak 서버가 로그인 페이지를 제공

**Roles(권한)**

-   **Realm Roles**
    -   렐름 레벨(전역) Role
-   **Client Roles**
    -   클라이언트 레벨 Role, 각 클라이언트별로 다른 Role을 가짐
-   **Composite Roles**
    -   렐름 또는 클라이언트 Role을 합친 Role

**Users(계정)**

-   Role Mapping으로 계정에 권한(Role) 설정

**Client Scope(클라이언트에서 사용하는 스코프)**

-   미리 정의해두고 여러 클라이언트에서 사용가능
-   Client Scope를 추가하면 JWT 토큰안에 커스텀 키에 데이터를 담을 수 있음
    -   Client Scope를 만들고 Mapper를 만듦
        -   Mapper 생성 시 `Token Claim Name`이 JWT에 포함될 키값
-   Client 메뉴, Client Scopes 탭에서 이미 생성한 Client Scope를 포함 설정이 가능

**Audience**

-   **SSO를 위해 사용하는 JWT 토큰으로 접근 가능한 Client들의 목록**
    -   일반적으로 Client Role이 할당되면 자동적으로 Audience 목록에 추가됨
    -   Realm Role을 쓰는 경우, 자동으로 Audience에 추가되지 않기 때문에 Client Mappers 탭에서 Audience Mapper를 추가해서 등록

### 참고

-   [Secure Frontend (React.js) and Backend (Node.js/Express Rest API) with Keycloak](https://medium.com/devops-dudes/secure-front-end-react-js-and-back-end-node-js-express-rest-api-with-keycloak-daf159f0a94e)
-   [Keycloak Document - Audience Support](https://github.com/keycloak/keycloak-documentation/blob/main/server_admin/topics/clients/oidc/con-audience.adoc)
