【发布时间】:2021-04-02 16:14:04
【问题描述】:
我正在尝试构建 Java 代码以使用 MSAL 和 MS Graph API 在 AAD 中创建用户。下面是我用来创建用户的代码。我能够成功检索令牌,但是在尝试发布请求时出现异常。我做错了什么?
public static void main(String[] args) throws Exception {
Map<String,Object> params = new LinkedHashMap<>();
params.put("givenName", "Test");
params.put("displayName", "ABC");
params.put("accountEnabled", true);
params.put("mailNickname","abc");
params.put("userPrincipalName","jcooper@demo.onmicrosoft.com");
StringBuilder postData = new StringBuilder();
for (Map.Entry<String,Object> param : params.entrySet()) {
if (postData.length() != 0) postData.append('&');
postData.append(URLEncoder.encode(param.getKey(), "UTF-8"));
postData.append('=');
postData.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
}
byte[] postDataBytes = postData.toString().getBytes("UTF-8");
int length =postDataBytes.length;
URL url = new URL("https://graph.microsoft.com/v1.0/users");
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type","application/json");
conn.setRequestProperty("Authorization", "Bearer "+accessToken);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setInstanceFollowRedirects(false);
conn.setRequestProperty("Content-Length",Integer.toString(length));
conn.connect();
conn.getInputStream();
try (var wr = new DataOutputStream(conn.getOutputStream())) {
wr.write(postDataBytes);
}
StringBuilder content;
System.out.println(postDataBytes+" "+postData);
try (var br = new BufferedReader(
new InputStreamReader(conn.getInputStream()))) {
String line;
content = new StringBuilder();
while ((line = br.readLine()) != null) {
content.append(line);
content.append(System.lineSeparator());
}
}
System.out.println(content.toString());
}
异常:线程“主”java.io.IOException 中的异常:服务器返回 HTTP 响应代码:411 用于 URL:https://graph.microsoft.com/v1.0/users
【问题讨论】:
-
(1) 如果您使用的是 Java 版 MSAL,那么您可以启用跟踪/内置遥测日志记录,以查看您在哪个 API 调用中看到了问题。 (2) 分享你得到的详细错误/跟踪
标签: java azure azure-active-directory microsoft-graph-api msal