java - 使用 Java 访问受 Azure Active Directory 保护的 Web 服务

标签 java web-services azure-active-directory

这是背景:

  • 应用服务 A 使用 Tomcat 和 Springboot,提供 Web 服务端点。例如https://xxx.azurewebsites.net/appA/order/1111
  • webapp A 受 AAD 身份验证(快速配置)保护。应用程序 (web-app) 在 AAD 中注册。 Web 应用程序的客户端 ID 为 [client-id]
  • 客户端 key [client-secret]在网络应用中创建。
  • AAD 目录 ID 为[tenant-id]
  • 使用浏览器打开上面的URL。显示 AD 登录页面,输入凭据后,我可以获得预期的 json 文件。

现在我有另一个控制台应用程序,它尝试从 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();
...

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

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

最佳答案

我可以重现您的问题,资源应该是您要访问的应用的client-idApplication ID URI ,而不是 MS 图 https://graph.microsoft.com

enter image description here

关于java - 使用 Java 访问受 Azure Active Directory 保护的 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58760872/

相关文章:

java - 是否可以将 ControlMaster 添加到 JSch 连接?

azure - 服务主体凭据,设置自定义标识符?

使用 OAuth2.0 和 AAD 进行 Azure API 管理?

azure-devops - 如何使用 powershell 命令创建 Azure AD B2C 身份体验框架策略 key ,其中名称和 secret 是输入参数

Java: 无法找到或加载主类 Main

java - quartz : preventing concurrent instances of a job in jobs. xml

java - 在java中并行化网络请愿

c# - Web 服务的空响应 (WSDL SOAP)

web-services - SOAP-ERROR : Encoding: string . .. 不是有效的 utf-8 字符串

php - 未从 PHP/MySQL NuSOAP 获得响应