#java #okta #okta-api
#java #okta #okta-api
Вопрос:
Я знаю, что с помощью этого заголовка ссылки мы можем получить следующих пользователей, и мы можем получить список пользователей, передав максимум 200 в качестве ограничения, как определено здесь.
Есть ли какой-либо способ получить всех пользователей, присутствующих в Okta, без каких-либо ограничений, используя язык Java?
Здесь я нашел способ получить всех пользователей в Python. Есть решение для Java?
Комментарии:
1. Все, что вам нужно сделать, это сделать веб-запрос
https://<you okta domain>.okta.com/api/v1/users
и проанализировать возвращенный JSON — вы можете найти множество способов сделать это в Java, даже если вы не можете найти пример, делающий это с помощью Okta URL.2. Привет @sleepfuriously Я знаю, что мы можем получить пользователей, но у меня более 1000 пользователей в Okta. Существует ограничение на одновременное получение только 200 пользователей. Мой вопрос в том, как получить их все без ограничений.?
Ответ №1:
Вы можете использовать Java Management SDK Okta, чтобы перечислить всех пользователей следующим образом:
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
Ответ №2:
Я попытался преобразовать логику 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 amp;amp; remoteUsers.length > 0) {
remoteUserList.addAll(Arrays.asList(remoteUsers));
log.info("Total remote users from okta: " remoteUserList.size());
} else {
url = null;
}
}
return remoteUserList;
}
Необходимо оптимизировать его, но на данный момент он работает.
Комментарии:
1. Смогли ли вы получить все 1000 без ограничений, или это была отдельная задача, кроме преобразования python в Java?
2. Да, прямого способа сделать это нет, но я могу привлечь всех пользователей, используя приведенный выше Java-код, используя один и тот же API для следующих 200 пользователей. Вы получите 200 пользователей в каждом запросе, это максимальный предел по Okta.