我有一个与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。
答案 0 :(得分:0)
我在身边进行了测试,这是我的步骤:
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/
您可以通过单击详细信息来获取客户端ID,记下它,我们将在app2中使用它:
为简化测试,app1将仅返回“ Hello”字符串。
https://jackdemoapp1.azurewebsites.net/app2/