我想授权由Azure Active Directory授予的OAuth JSON Web令牌,而我要做的一件事是使用Microsoft Graph API在令牌的appId中获取有关该应用程序的更多信息。
Microsoft Graph API允许我通过
通过其ID获取应用程序https://graph.microsoft.com/beta/applications/{id}
,但不是通过
的appIdhttps://graph.microsoft.com/beta/applications/{appId}
我看到使用Microsoft Graph API通过其AppId来获取应用程序的最好方法是通过如下过滤器:
https://graph.microsoft.com/beta/applications?filter=appId eq '{appId}'
上面的过滤器在Microsoft Graph Explorer中工作得很好,但是当使用HttpUrlConnection使用GET请求调用Graph API时,我的请求失败,并显示HTTP代码400和消息“错误的请求”。
这很奇怪,因为使用完全相同的HttpUrlConnection通过
来获取所有应用程序https://graph.microsoft.com/beta/applications
工作正常。
关于过滤器功能是否存在一些我无法在Microsoft Graph API GET请求中使用的功能?我应该如何通过其AppId获取有关应用程序的信息?
这是我用于HttpURLConnection的Java代码的片段:
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());
}
答案 0 :(得分:1)
您应该使用URLEncode查询参数。
String url2=URLEncoder.encode("$filter=appId eq '{applicationId}'");
URL url = new URL("https://graph.microsoft.com/beta/applications?"+url2);