Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用基于管理证书的身份验证对Azure进行REST API调用?_Java_Azure_Adal_Azure Billing Api - Fatal编程技术网

Java 如何使用基于管理证书的身份验证对Azure进行REST API调用?

Java 如何使用基于管理证书的身份验证对Azure进行REST API调用?,java,azure,adal,azure-billing-api,Java,Azure,Adal,Azure Billing Api,我正在尝试使用java应用程序从Microsoft Azure获取使用情况和费率卡信息,我逐渐了解到我可以使用管理证书来验证是否可以拨打Microsoft Azure 我从.publishsettings文件中获得了管理证书 但是,在AuthenticationContext中,我没有看到任何方法利用此证书来获取进行使用和评级API调用所需的访问令牌 我试图引用,但我没有看到任何可用于使用率和费率卡的客户机,答案是ManagementClient,它不适用于我的用例。我也提到了这个博客,它提到了

我正在尝试使用java应用程序从Microsoft Azure获取使用情况和费率卡信息,我逐渐了解到我可以使用管理证书来验证是否可以拨打Microsoft Azure

我从.publishsettings文件中获得了管理证书

但是,在
AuthenticationContext
中,我没有看到任何方法利用此证书来获取进行使用和评级API调用所需的访问令牌

我试图引用,但我没有看到任何可用于使用率和费率卡的客户机,答案是ManagementClient,它不适用于我的用例。我也提到了这个博客,它提到了
ClientAssertionCertificate
,我在文章中没有看到


NB:我能够使用基于用户名、密码和客户端ID的身份验证机制对Azure进行REST API调用,以获取使用情况和费率卡信息,但是我想使用这个管理证书机制,因为我的应用程序的用户可能不信任这个应用程序及其凭据,而且从用户的角度来看,这个基于证书的机制似乎更容易使用。

简单的答案是,您不能使用管理证书来使用计费API。计费API本质上是使用Azure AD令牌的较新API的一部分

管理证书只能用于

但是,在AuthenticationContext中,我没有看到任何方法利用此证书来获取进行使用率和速率API调用所需的访问令牌

我也提到了这个博客,其中提到了ClientAssertionCertificate,我在adal的java库中没有看到它

正如Gaurav所说,我们只能使用Azure Active Directory调用使用率和费率卡API进行身份验证。您可以使用AuthenticationContext获取
访问\u令牌
,如下代码所示。您需要提供
客户ID
客户机密
密钥

私有身份验证结果getAccessTokenFromClientCredentials()
扔掉的{
AuthenticationContext上下文=null;
AuthenticationResult=null;
ExecutorService=null;
试一试{
服务=Executors.newFixedThreadPool(1);
context=newauthenticationcontext(authority+tenant+“/”,true,
服务);

未来)。我建议您参考本文档了解如何。

这是否意味着除了获取用户的用户名和密码之外,没有其他方法可以从使用率和费率卡API获取数据?这是正确的。IMHO,这是正确的方法。使用管理证书方法,本质上拥有证书的人完全控制您的Azure订阅。通过此方法,您可以获得基于角色的访问控制,以便您可以向Azure订阅上的用户授予细粒度权限。
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;
    }