Okta получить список всех пользователей без ограничений в java

Я знаю, что с помощью этого заголовка ссылки мы можем получить следующие пользователи, и мы можем получить список пользователей, передав максимум 200 в качестве ограничения, как определено здесь.

Есть ли способ получить всех пользователей, присутствующих в Okta, без каких-либо ограничений, используя язык java?

Здесь я нашел способ, чтобы все пользователи Питон. Любое решение для Java?


person Shailendra Madda    schedule 16.09.2020    source источник
comment
Все, что вам нужно сделать, это сделать веб-запрос к https://<you okta domain>.okta.com/api/v1/users и проанализировать возвращенный JSON — вы можете найти множество способов сделать это в Java, даже если вы не можете найти пример, делающий это с URL-адресом Okta.   -  person sleep furiously    schedule 16.09.2020
comment
Привет @sleepfuriously Я знаю, что мы можем получить пользователей, но у меня более 1000 пользователей в Okta. Существует ограничение на получение только 200 пользователей одновременно. Мой вопрос в том, как получить их все без ограничений.?   -  person Shailendra Madda    schedule 16.09.2020


Ответы (2)


Вы можете использовать Okta Java Management SDK, чтобы перечислить всех пользователей следующим образом:

UserList users = client.listUsers();

// stream
client.listUsers().stream()
    .forEach(user -> {
      // do something
    });

Ссылки: https://github.com/okta/okta-sdk-java#list-all-users https://github.com/okta/okta-sdk-java#paging

person hawk    schedule 07.10.2020

Я попытался преобразовать логику Python в Java. Вот рабочий код для получения всех пользователей:

public List<RemoteUsersDTO> getAllRemoteUsers() {
    RestTemplate restTemplate = new RestTemplate();
    HttpHeaders headers = new HttpHeaders();

    String OKTA_URL = "https:bmg.okta-emea.com/api/v1/users?limit=200";

    headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
    headers.setContentType(MediaType.APPLICATION_JSON);
    headers.add("Authorization", "SSWS " + OKTA_API_KEY);
    HttpEntity<String> request = new HttpEntity<>(headers);
    String url = OKTA_URL;
    List<RemoteUsersDTO> remoteUserList = new ArrayList<>();
    while (url != null) {
        ResponseEntity<RemoteUsersDTO[]> response = restTemplate.exchange(
                url, HttpMethod.GET, request, RemoteUsersDTO[].class);
        RemoteUsersDTO[] remoteUsers = response.getBody();
        HttpHeaders responseHeaders = response.getHeaders();
        List<String> links = responseHeaders.get("Link");
        if (links != null) {
            for (String link : links) {
                if (link.contains("next")) {
                    String urlNext = StringUtils.substringBefore(link, ";");
                    urlNext = urlNext.substring(1, urlNext.length() - 1);
                    url = urlNext;
                } else {
                    url = null;
                }
            }
        } else {
            url = null;
        }
        if (remoteUsers != null && remoteUsers.length > 0) {
            remoteUserList.addAll(Arrays.asList(remoteUsers));
            log.info("Total remote users from okta: " + remoteUserList.size());
        } else {
            url = null;
        }
    }
    return remoteUserList;
}

Нужно оптимизировать, но пока работает.

person Shailendra Madda    schedule 16.09.2020
comment
Удалось ли вам получить все 1000 без ограничений, или это было отдельное усилие, чем преобразование python в java? - person sleep furiously; 17.09.2020
comment
Да, нет прямого способа сделать это, но я могу получить всех пользователей, используя приведенный выше код Java, используя тот же API со следующими 200 пользователями. Вы получите 200 пользователей в каждом запросе, это максимальный лимит на Okta. - person Shailendra Madda; 18.09.2020