JAVA/PROJECT
[Keycloak] java 로 keycloak 에서 user 목록 가져오기
Jungry_
2024. 9. 24. 17:47
반응형
원래 user 목록 조회하려면 admin 권한 줘야하는데
그럼 매번 유저 가입할때마다 admin 권한 일일히 줘야해서 현실적으로 불가능쓰 ..
그래서 Role 추가를 통해서 user 목록을 불러올 수 있는 방법을 써볼거임 ~~
1) create role
2) Action 클릭 > Add Associated roles
3) filter by clients
여기서 view-users, query-users 추가하기
4) Realm role 로 이동
5) default 에 추가
default-roles 에 Client Role 을 추가해준다 !!!!!
6) Test
6-1) token 발급 후
https://{{keycloak주소}}/admin/realms/{{realm명}}/users
을 넣고 get 으로 전달하기
결과가 나오면 굿키굿키 !!!
이제 자바에서 가져와보자
FriendsController.java
@RestController
@RequestMapping("/api/v1/friends")
@AllArgsConstructor
public class FriendsController {
private final FriendsService friendsService;
// 1) 사용자 조회 기능
@GetMapping("/users")
public ResponseEntity<String> getUserList(
@RequestHeader("Authorization") String token
) {
return ResponseEntity.ok(friendsService.getUserList(token));
}
}
FriendsService.java
@Service
@AllArgsConstructor
public class FriendsService {
private final KeycloakUserService keycloakUserService;
public String getUserList(String token) {
return keycloakUserService.getUserList(token);
}
}
KeycloakUserService.java
@Component
public class KeycloakUserService {
@Value("${keycloak.admin-uri}")
private String KEYCLOAK_ADMIN_URI;
public String getUserList(String accessToken) {
String url = KEYCLOAK_ADMIN_URI + "/users";
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setBearerAuth(accessToken.replace("Bearer",""));
HttpEntity<String> request = new HttpEntity<>(headers);
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, request, String.class);
return response.getBody();
}
}
admin-uri 는 알아서 넣어주기 (아까 postman 에서 호출한 주소임)
Authorization 으로 가져오니까 Bearer 를 두번 적어서 replace 해서 넣어줘야한다 .. 이거때문에 깩개개개고생함 ㅜㅜㅜ
반응형