Я хочу авторизовать веб-токен 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());
}