Keycloak 4

[Keycloak] 클라이언트별 그룹 로그인 제한 구현

Keycloak 26 버전에서는 클라이언트 단위로 로그인 제어를 정교하게 할 수 있는 기능이 제한적입니다. 본 포스트에서는 특정 클라이언트에 특정 그룹만 로그인 가능하도록 제어하는 커스텀 Authenticator SPI를 구현하고, 이를 Browser Flow에 적용하는 과정을 정리합니다.1. 요구사항 정리특정 클라이언트(clientId)에 대해서만 특정 그룹(Group.name)에 속한 사용자만 로그인 가능클라이언트별로 매핑된 허용 그룹 리스트는 관리자가 UI에서 직접 설정할 수 있어야 함설정은 Keycloak Admin Console의 Authentication Flow에서 입력2. 해결 전략Keycloak의 Authenticator SPI를 구현하여 사용자 인증 시점에 그룹 조건을 체크실행 위치는 ..

Keycloak 2025.05.27

[Keycloak] 어드민 API 호출 권한, 사용자에게 직접 부여하기

이번 글에서는 Keycloak의 Admin API 호출 권한을 클라이언트가 아닌 개별 사용자에게 직접 부여하는 방법을 정리합니다. 일반적으로 권한은 클라이언트에 설정되지만, 특정 사용자만 API 호출 권한을 갖게 하려면 직접 사용자에게 역할을 부여해야 합니다.목표 시나리오특정 사용자가 Keycloak Admin API 호출에 필요한 권한을 직접 갖도록 설정예를 들어, 특정 관리자가 직접 사용자 정보 조회 및 그룹 조회 등의 API를 호출할 수 있게 설정왜 사용자에게 직접 역할을 부여하는가?장점 설명세부 권한 관리특정 사용자에게만 정교하게 권한 부여임시 권한 부여 가능긴급 상황 등 일시적으로 API 호출 권한 부여 가능최소 권한 원칙 준수클라이언트 전체가 아닌 특정 사용자에게만 제한적으로 권한 부여Keyc..

Keycloak 2025.04.01

[Keycloak] Spring Boot Resource Server 연동하기

이 글에서는 Keycloak 26과 Spring Boot 기반의 리소스 서버 간의 JWT 연동 방법을 설명합니다. 특히, 리소스 서버가 Keycloak에 클라이언트로 별도 등록되지 않고도 JWT를 검증하는 방법, JWT 파싱 컨버터 설정 및 기본 보안 설정을 다룹니다.리소스 서버는 Keycloak에 클라이언트로 등록될 필요가 없습니다.JWT의 iss 클레임과 리소스 서버의 issuer-uri 설정이 정확히 일치해야 합니다.리소스 서버는 {issuer-uri}/protocol/openid-connect/certs를 통해 JWT 파싱을 위한 컨버터 설정이 필요합니다.간단한 Security 설정을 진행합니다.Spring Boot 프로젝트 의존성 설정Gradle 설정 예시 (build.gradle.kts)dep..

Keycloak 2025.03.26

[Keycloak] JWT에 Custom 스코프 추가하기

이 글에서는 최신 버전인 Keycloak 26을 기준으로 JWT에 사용자가 소속된 그룹 정보를 {id, name} 형태로 추가하기 위한 Client Scope 설정 및 Custom Mapper를 구현하는 방법을 자세히 다룹니다.1. 요구사항 정의Keycloak에서 발급한 JWT의 Payload에 사용자가 속한 그룹의 id와 name 정보를 배열 형태로 추가합니다.예상되는 Payload 구조:{ "sub": "12345678-1234-1234-1234-123456789abc", "preferred_username": "johndoe", "group_info": [ {"id": "group-1-id", "name": "Admins"}, {"id": "group-2-id", "name": "U..

Keycloak 2025.03.26