使用MSI通过AAD访问Azure Web App Web服务

时间:2019-11-04 16:56:43

标签: java azure rest authentication

我有一个与Tomcat一起运行的Azure Web应用程序(应用程序服务)。我已经部署了2个战争应用程序。 WAR-1提供了Web服务调用,该调用使用Springboot返回json文件。 WAR-2是一个Web应用程序,它在WAR-1中调用此Web服务。该Web应用程序已为系统分配了托管身份(或MSI)。此外,此Web应用程序还使用Express配置通过AAD进行了身份验证。

通过AAD身份验证后,我可以访问WAR-2中的静态页面。现在,我需要从WAR-1中获取数据。我有一个包含以下代码的servlet:

String subscriptionId = "xxxx";
String testURL    = "https://yyy.azurewebsites.net/war1/person/100";
String resourceId = "https://management.azure.com/";

AppServiceMSICredentials credentials = new AppServiceMSICredentials(AzureEnvironment.AZURE);
Azure azure = Azure.configure()
                .withLogLevel(LogLevel.BODY_AND_HEADERS)
                .authenticate(credentials)
                .withSubscription(subscriptionId);
String token = credentials.getToken(resourceId);
HttpURLConnection conn = (HttpURLConnection) new URL(testURL).openConnection();
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
conn.setRequestMethod("GET");
conn.setRequestProperty("Authorization", "Bearer " + token);

int responseCode = conn.getResponseCode();

OutputStream os = conn.getOutputStream();
....

我确实能够获得令牌,但是当我进行GET调用时,响应代码为500。

所以我的问题是...这是拨打电话的正确方法吗?我确实找到了与此情况类似的文章https://dotnetdevlife.wordpress.com/2018/10/22/call-azure-ad-protected-website-using-managed-service-identity-msi/,但它使用的是.Net。我找不到与此等效的任何Java。

1 个答案:

答案 0 :(得分:0)

我在身边进行了测试,这是我的步骤:

1。一个Azure Web应用程序中有两个应用程序。

App1:pd.get_dummies(df, ['a', 'b'], prefix_sep='_') Out[23]: a_c1 a_c2 a_c3 b_c1 b_c4 0 1 0 0 1 0 1 1 0 0 0 1 2 0 1 0 1 0 3 1 0 0 1 0 4 0 0 1 1 0

App2:https://jackdemoapp1.azurewebsites.net/app1/

2。在Azure门户上配置身份验证/授权。

enter image description here

您可以通过单击详细信息来获取客户端ID,记下它,我们将在app2中使用它:

enter image description here

3。在Azure门户上配置托管身份

enter image description here

为简化测试,app1将仅返回“ Hello”字符串。

enter image description here

4。 app2中的代码

https://jackdemoapp1.azurewebsites.net/app2/

结果

enter image description here