我正在尝试使用Java应用程序从Microsoft Azure获取使用率和价目表信息,我开始明白我可以使用管理证书对Microsoft Azure进行身份验证进行身份验证。
我从here获得的.publishsettings文件中获得了管理证书
但是,在AuthenticationContext
中,我没有看到任何使用此证书的方法来获取使用和评价API调用所需的访问令牌。
我尝试引用this answer,但我没有看到任何可用的客户端和价目表,答案是指管理客户端,而不是我的用例。我也引用了这个博客,其中引用了ClientAssertionCertificate
,我在java library for adal中没有看到。
NB:我可以使用用户名,密码和&amp ;;对Azure进行REST API调用,以获取使用情况和价目表信息。基于客户端ID的身份验证机制,但我想利用此管理证书机制,因为我的应用程序的用户可能不信任此应用程序及其凭据,并且从用户角度来看,这种基于证书的机制似乎更容易使用。 / p>
答案 0 :(得分:1)
简单回答是您无法使用管理证书来使用结算API。 Billing API实质上是使用Azure AD令牌的新API的一部分。
管理证书只能用于Service Management APIs
。
答案 1 :(得分:1)
但是,在AuthenticationContext中,我没有看到任何利用此证书获取使用和评价API调用所需的访问令牌的方法。
我也引用了这个博客,它引用了ClientAssertionCertificate,我在java库中看不到adal。
正如Gaurav所说,我们只能打电话给用户&使用Azure Active Directory进行身份验证的评级卡API。您可以使用AuthenticationContext获取access_token
,如下面的代码。您需要提供client ID
和Client Secret
(key
)。
private AuthenticationResult getAccessTokenFromClientCredentials()
throws Throwable {
AuthenticationContext context = null;
AuthenticationResult result = null;
ExecutorService service = null;
try {
service = Executors.newFixedThreadPool(1);
context = new AuthenticationContext(authority + tenant + "/", true,
service);
Future<AuthenticationResult> future = context.acquireToken(
"https://graph.windows.net", new ClientCredential(clientId,
clientSecret), null);
result = future.get();
} catch (ExecutionException e) {
throw e.getCause();
} finally {
service.shutdown();
}
if (result == null) {
throw new ServiceUnavailableException(
"authentication result was null");
}
return result;
}
注意:我可以使用用户名,密码和密码对Azure进行REST API调用,以获取使用情况和价目表信息。基于客户端ID的认证机制,.....
似乎我们无法使用管理证书机制来调用Usage&amp;价目表API。因为这些调用用户或服务主体是Azure AD租户中Owner, Contributor or Reader role
的成员,用于请求的订阅(see this document)。我建议您参考此文档,了解如何authenticate Azure Resource Management。