首页 > 解决方案 > 使用 Java 访问受 Azure Active Directory 保护的 Web 服务

问题描述

这是背景:

现在我有另一个控制台应用程序,它试图从 webapp A 获取订单信息。代码如下:

String AUTHORITY = "https://login.microsoftonline.com/" + [tenant-id];
String ORDER_URL = "https://xxx.azurewebsites.net/appA/order/1111"

ExecutorService service = Executors.newFixedThreadPool(1);
ClientCredential credentials = new ClientCredential([client-id], [client-secret]);

AuthenticationContext context = new AuthenticationContext(AUTHORITY, false, service);

Future<AuthenticationResult> future = context.acquireToken("https://graph.microsoft.com", credentials, null);
AuthenticationResult result = future.get();

String token = result.getAccessToken();
System.out.println(token);

HttpURLConnection conn = (HttpURLConnection) new URL(ORDER_URL).openConnection();
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
conn.setRequestMethod("GET");
conn.setRequestProperty("Authorization", "Bearer " + token);
conn.connect();

int responseCode = conn.getResponseCode();
System.out.println(responseCode);

InputStream is = conn.getInputStream();
...

我能够获取令牌,但响应代码为 401,并且错误消息是“您无权查看此目录或页面”。

那么我是否需要分配其他 API 权限才能使其正常工作?或者有一些其他的设置被遗漏了。

标签: javaweb-servicesazure-active-directory

解决方案


我可以重现您的问题,resource应该是您要访问的应用程序的,而不是 MSclient-id图。Application ID URIhttps://graph.microsoft.com

在此处输入图像描述


推荐阅读