[Java] Keycloak Admin REST API 기반 User 활용 및 예시 : with OpenFeign
adjh54
2025. 2. 23. 22:53
728x170
해당 글에서는 Keycloak Admin REST API를 기반으로 User 활용 방법 및 예시를 확인해 봅니다.
1) Keycloak Admin REST API : Users
💡 Keycloak Admin REST API : Users - Users 엔드포인트는 사용자 관리를 위한 종합적인 REST API 인터페이스를 제공합니다. - RESTful 아키텍처 원칙을 따르는 표준 HTTP 메서드 사용하며 JSON 형식의 요청/응답 데이터 구조를 가지고 있습니다. - Bearer 토큰 기반의 인증 방식이며 페이지네이션과 필터링을 통한 효율적인 데이터 조회를 수행합니다.
💡 [참고] 아래에서 다루지 않는 API에 대해서는 공식 API 문서를 참고하시면 도움이 됩니다.
- 사용자 관리와 관련된 다양한 작업을 수행할 수 있는 API를 제공합니다. - 사용자 관리, 보안 및 인증 관리(비밀번호 재설정, 세션 관리), 권한 및 그룹 관리에 사용할 수 있습니다. - 이러한 API들은 REST 방식으로 구현되어 있어 HTTP 메서드를 통해 직관적으로 사용할 수 있으며, JSON 형식으로 데이터를 주고받을 수 있습니다.
/**
* 아이디 기반 특정 사용자 조회
*/@GetMapping("/{id}}")voidselectKeycloakUserDetail(
@RequestHeader("Authorization") String bearerToken,
@PathVariable String id
);
3.2. 응답
💡 응답
- 성공적인 조회의 경우 200 OK 상태 코드와 함께 사용자 정보가 JSON 형식으로 반환됩니다. - 사용자를 찾을 수 없는 경우 404 Not Found 상태 코드가 반환됩니다.
응답 코드
응답 정보
설명
200
OK
성공적인 조회
404
Not Found
조회 실패
4. 사용자 정보 수정([PUT] /admin/realms/{realm}/users/{id})
💡 사용자 정보 수정([PUT] /admin/realms/{realm}/users/{id})
- 기존 사용자의 정보를 업데이트하는 API입니다. - 사용자의 기본 정보, 속성, 설정 등을 수정할 수 있습니다. - PUT 메서드를 사용하며 JSON 형식으로 업데이트할 정보를 전달합니다.
7. 사용자 그룹 조회([GET] /admin/realms/{realm}/users/{id}/groups)
💡 사용자 그룹 조회([GET] /admin/realms/{realm}/users/{id}/groups)
- 특정 사용자가 속한 모든 그룹을 조회하는 API입니다. - 사용자의 그룹 멤버십을 확인하고 관리하는 데 사용됩니다. - GET 메서드를 사용하며 JSON 형식으로 그룹 정보를 반환합니다.
// format// GET /admin/realms/{realm}/users/{id}/groups// example// GET http://localhost:9001/admin/realms/dev-realm/users/97204aa2-1160-4243-903b-81ba2be14de0/groups
7.1. 요청 파라미터
Parameter
Type
Required
Description
realm
string
Yes
대상 Realm 이름
id
string
Yes
그룹을 조회할 사용자의 고유 식별자
/**
* 사용자의 그룹 목록 조회
*/@GetMapping("/users/{id}/groups")List<GroupRepresentation> getUserGroups(
@RequestHeader("Authorization") String bearerToken,
@PathVariable String id
);
7.2. 응답
응답 코드
응답 상태
설명
200
OK
성공적인 그룹 목록 조회
404
Not Found
사용자를 찾을 수 없음
8. 사용자 그룹 추가([PUT] /admin/realms/{realm}/users/{id}/groups/{groupId})
💡 사용자 그룹 추가([PUT] /admin/realms/{realm}/users/{id}/groups/{groupId})
- 특정 사용자를 지정된 그룹에 추가하는 API입니다. - 사용자의 그룹 멤버십을 관리하는데 사용됩니다. - PUT 메서드를 사용하며 별도의 요청 본문이 필요하지 않습니다.
// format// PUT /admin/realms/{realm}/users/{id}/groups/{groupId}// example// PUT http://localhost:9001/admin/realms/dev-realm/users/97204aa2-1160-4243-903b-81ba2be14de0/groups/f8293f24-5832-4841-9f23-b85e0c4c6e44
8.1. 요청 파라미터
Parameter
Type
Required
Description
realm
string
Yes
대상 Realm 이름
id
string
Yes
그룹에 추가할 사용자의 고유 식별자
groupId
string
Yes
사용자를 추가할 그룹의 고유 식별자
/**
* 사용자를 그룹에 추가
*/@PutMapping("/users/{id}/groups/{groupId}")voidaddUserToGroup(
@RequestHeader("Authorization") String bearerToken,
@PathVariable String id,
@PathVariable String groupId
);
8.2. 반환 값
응답 코드
Status Code
설명
204
No Content
성공적인 그룹 추가
404
Not Found
사용자 또는 그룹을 찾을 수 없음
9. 사용자 역할 매핑 조회([GET] /admin/realms/{realm}/users/{id}/role-mappings)
💡 사용자 역할 매핑 조회([GET] /admin/realms/{realm}/users/{id}/role-mappings)
- 특정 사용자에게 할당된 모든 역할(role)을 조회하는 API입니다. - 사용자의 권한과 접근 제어를 관리하는데 사용됩니다. - GET 메서드를 사용하며 JSON 형식으로 역할 정보를 반환합니다.
// format// GET /admin/realms/{realm}/users/{id}/role-mappings// example// GET http://localhost:9001/admin/realms/dev-realm/users/97204aa2-1160-4243-903b-81ba2be14de0/role-mappings
9.1. 요청 파라미터
Parameter
Type
Required
Description
realm
String
Yes
대상 Realm 이름
id
String
Yes
역할을 조회할 사용자의 고유 식별자
/**
* 사용자의 역할 매핑 조회
*/@GetMapping("/users/{id}/role-mappings")MappingsRepresentation getRoleMappings(
@RequestHeader("Authorization") String bearerToken,
@PathVariable String id
);
9.2. 반환 값
응답 코드
응답 상태
설명
200
OK
성공적인 역할 매핑 조회
404
Not Found
사용자를 찾을 수 없음
10. 사용자 로그아웃([POST] /admin/realms/{realm}/users/{id}/logout)
💡 사용자 로그아웃([POST] /admin/realms/{realm}/users/{id}/logout)
- 특정 사용자의 모든 활성 세션을 종료하는 API입니다. - 강제 로그아웃이 필요한 경우나 보안상의 이유로 세션을 종료해야 할 때 사용됩니다. - POST 메서드를 사용하며 별도의 요청 본문이 필요하지 않습니다.
// format// POST /admin/realms/{realm}/users/{id}/logout// example// POST http://localhost:9001/admin/realms/dev-realm/users/97204aa2-1160-4243-903b-81ba2be14de0/logout
10.1. 요청 파라미터
Parameter
Type
Required
Description
realm
string
Yes
대상 Realm 이름
id
string
Yes
로그아웃할 사용자의 고유 식별자
/**
* 사용자 로그아웃
*/@PostMapping("/users/{id}/logout")voidlogoutUser(
@RequestHeader("Authorization") String bearerToken,
@PathVariable String id
);