정구리의 우주정복

[Keycloak] java 로 keycloak 에서 user 목록 가져오기 본문

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 해서 넣어줘야한다 .. 이거때문에 깩개개개고생함 ㅜㅜㅜ 

반응형
Comments