Получить токен из OKTA API - пример Java (простой) - PullRequest
0 голосов
/ 21 октября 2019

Я создал учетную запись в среде OKTA здесь . Я искал в сети, но я не смог найти примеров того, как получить токен доступа от OKTA API. Я ищу пример в "простом" коде Java. Но если что-то есть в любом SDK, я буду счастлив. Я пытался создать HTTP-запрос (POST) к конечной точке / token . Я использовал cliend_id и client_secret - в теле. Я также пытался вставить в заголовок как обычную аутентификацию (до этого я кодировал client_id: client_secret с Base64), но я все еще получаю несанкционированный доступ (401).

1 Ответ

0 голосов
/ 23 октября 2019

ОК, у меня есть решение. Проблема была в неправильной конфигурации на ОКТА. Для тех, кому нужен рабочий пример, я поделюсь своим протестированным кодом (поверьте, он работает)

 public String GetToken() throws IOException, InterruptedException {
    HttpClient client = HttpClient.newBuilder()
            .build();

    HttpRequest httpRequest = HttpRequest.newBuilder()
            .uri(URI.create("https://YOUR_OKTA_DOMAIN/oauth2/default/v1/token"))
            .headers("Content-type", "application/x-www-form-urlencoded",
                    "Authorization", "Basic " + Base64.getEncoder().encodeToString("CLIENT_ID:CLIENT_SECRET".getBytes()),
                    "Accept", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(
                    "&grant_type=client_credentials" ))
            .build();

    HttpResponse<?> response = client.send(httpRequest, HttpResponse.BodyHandlers.ofString());       

    return response.body().toString();
}

В Okta вам необходимо создать дополнительную область для Сервера авторизации. Эта область должна быть по умолчанию, или, если вы не хотите устанавливать область по умолчанию, вы должны добавить ее в теле как

.POST(HttpRequest.BodyPublishers.ofString(
                    "&grant_type=client_credentials" + 
                    "scope=SCOPE_NAME"))
...