Как получить приложение по appId, используя Microsoft Graph API через Java, используя HttpURLConnection - PullRequest
1 голос
/ 10 июля 2019

Я хочу авторизовать веб-токен OAuth JSON, предоставленный Azure Active Directory, и мне нужно получить дополнительную информацию о приложении в appId токена с помощью Microsoft Graph API.

Microsoft Graph API позволяет мне получить приложение по его идентификатору через

https://graph.microsoft.com/beta/applications/{id}

, но НЕ по его appId через

https://graph.microsoft.com/beta/applications/{appId}

Лучший способ использовать Microsoft Graph API для получения приложения с использованием его AppId - использовать фильтр, подобный следующему:

https://graph.microsoft.com/beta/applications?filter=appId eq '{appId}'

Приведенный выше фильтр прекрасно работает в Microsoft Graph Explorer, но при вызове Graph API с использованием запроса GET с использованием HttpUrlConnection мой запрос не выполняется с HTTP-кодом 400 и сообщением «Bad Request».

Это странно, потому что использование точно такого же HttpUrlConnection для ПОЛУЧЕНИЯ всего спектра приложений через

https://graph.microsoft.com/beta/applications

работает просто отлично.

Есть ли что-то в функциональности фильтра, которую я не могу использовать в GET-запросе Microsoft Graph API? Как мне получить информацию о приложении по его AppId?

Вот фрагмент кода Java, который я использую для HttpURLConnection:

url = new URL(String.format("https://graph.microsoft.com/beta/applications?filter=appId eq '%s'", appId));
        final HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Authorization", "Bearer " + result.getAccessToken());
        conn.setRequestProperty("Accept", "application/json");
        conn.setRequestProperty("Content-Type", "application/json");

        final int httpResponseCode = conn.getResponseCode();
        if (httpResponseCode == 200 || httpResponseCode == 201) {
            BufferedReader in = null;
            final StringBuilder response;
            try {
                in = new BufferedReader(
                        new InputStreamReader(conn.getInputStream()));
                String inputLine;
                response = new StringBuilder();
                while ((inputLine = in.readLine()) != null) {
                    response.append(inputLine);
                }
            } finally {
                in.close();
            }
            final JSONObject json = new JSONObject(response.toString());
            return json.toString(4);
        } else {
            return String.format("Connection returned HTTP code: %s with message: %s",
                    httpResponseCode, conn.getResponseMessage());
        }

1 Ответ

1 голос
/ 11 июля 2019

Вы должны URLEкодировать параметры запроса.

String url2=URLEncoder.encode("$filter=appId eq '{applicationId}'");
URL url = new URL("https://graph.microsoft.com/beta/applications?"+url2);
...