2

我想使用 Java SDK 在新的 Azure 门户中列出可用的 IP VM。

几年前,在旧的经典门户中,我遵循通常的管理证书程序来访问 vm、创建 vm 并使用 Azure Endpoints。

Fast fwd 现在我看到他们使用了新的门户和新机制来与 Java SDK 交互。我在上面链接的某处读到,使用带有证书的旧方式,我只能管理类门户资源。

我正在尝试编写一个简单的程序来验证并列出新门户的虚拟机作为开始。好像他们把事情复杂化了很多。

我按照以下链接“使用密码创建服务主体”

https://azure.microsoft.com/en-us/documentation/articles/resource-group-authenticate-service-principal/

然后我去了这个链接

https://azure.microsoft.com/en-us/documentation/samples/resources-java-manage-resource-group/

这让我去上面页面中的“查看如何创建身份验证文件”链接

(我的不是 web 应用程序,当我尝试将 AD 创建为本机客户端应用程序时,它不允许我在配置选项卡中保存密钥,所以我必须创建一个 web 应用程序)

完成所有这些之后,我遇到了以下错误

    SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for         further details.
    'authority' Uri should have at least one segment in the path (i.e.https://<host>/<path>/...)
   java.lang.IllegalArgumentException: 'authority' Uri should have at least one segment in the path (i.e. https://<host>/<path>/...)
    at com.microsoft.aad.adal4j.AuthenticationAuthority.detectAuthorityType(AuthenticationAuthority.java:190)
    at com.microsoft.aad.adal4j.AuthenticationAuthority.<init>(AuthenticationAuthority.java:73)

当我检查时,它说错误是因为我在您的 Azure Active Directory 中没有有效的客户端应用程序 ID。

是否有任何简单的方法来验证和开始使用 API?

4

1 回答 1

1

@Vikram,我建议您可以尝试参考文章在 AAD 上创建应用程序。

然后您可以按照下面的代码获取访问令牌进行身份验证。

// The parameters include clientId, clientSecret, tenantId, subscriptionId and resourceGroupName.
private static final String clientId = "<client-id>";
private static final String clientSecret = "<key>";
private static final String tenantId = "<tenant-id>";
private static final String subscriptionId = "<subscription-id>";

// The function for getting the access token via Class AuthenticationResult
private static AuthenticationResult getAccessTokenFromServicePrincipalCredentials()
        throws ServiceUnavailableException, MalformedURLException, ExecutionException, InterruptedException {
    AuthenticationContext context;
    AuthenticationResult result = null;
    ExecutorService service = null;
    try {
        service = Executors.newFixedThreadPool(1);
        // TODO: add your tenant id
        context = new AuthenticationContext("https://login.microsoftonline.com/" + tenantId, false, service);
        // TODO: add your client id and client secret
        ClientCredential cred = new ClientCredential(clientId, clientSecret);
        Future<AuthenticationResult> future = context.acquireToken("https://management.azure.com/", cred, null);
        result = future.get();
    } finally {
        service.shutdown();
    }

    if (result == null) {
        throw new ServiceUnavailableException("authentication result was null");
    }
    return result;
}

String accessToken = getAccessTokenFromServicePrincipalCredentials().getAccessToken();

如果要在新门户上列出虚拟机,可以尝试使用 REST APIList the resources in a subscription获取所有资源并通过资源类型过滤虚拟机Microsoft.Compute/virtualMachines

希望能帮助到你。

于 2016-08-11T09:38:48.757 回答