我尝试使用以下代码来检索公共IP的大小
Configuration config = ManagementConfiguration.configure( new URI(uri), subscriptionId, keyStoreLocation, // the file path to the JKS keyStorePassword, // the password for the JKS KeyStoreType.jks // flags that I'm using a JKS keystore ); NetworkResourceProviderClient networkResourceProviderClient = NetworkResourceProviderService.create(config); PublicIpAddressListResponse PublicIpAddressListResponse =networkResourceProviderClient.getPublicIpAddressesOperations().listAll(); ArrayList<PublicIpAddress> PublicIpAddressList =PublicIpAddressListResponse.getPublicIpAddresses(); System.out.println(PublicIpAddressList.size());
使用Azure AD ServicePrincipal身份验证,它返回-0
使用带有 “ https://management.azure.com/ ” API的证书身份验证,它将返回-AuthenticationFailed:
Exception in thread "main" com.microsoft.windowsazure.exception.ServiceException: AuthenticationFailed: Authentication failed. The 'Authorization' header is not present or provided in an invalid format. at com.microsoft.windowsazure.exception.ServiceException.createFromJson(ServiceException.java:290) at com.microsoft.azure.management.network.PublicIpAddressOperationsImpl.listAll(PublicIpAddressOperationsImpl.java:1443) at com.microsoft.azure.auth.Program.main(Program.java:50)
任何想法如何检索所有虚拟机的公共IP地址?或如何进行身份验证以获得IP值?
该问题是由使用不正确的身份验证引起的。
下面的身份验证代码仅适用于Azure服务管理。
Configuration config = ManagementConfiguration.configure( new URI("https://management.core.windows.net), subscriptionId, keyStoreLocation, // the file path to the JKS keyStorePassword, // the password for the JKS KeyStoreType.jks // flags that I'm using a JKS keystore );
为验证Azure资源管理,文档“验证Azure资源管理请求”(https://msdn.microsoft.com/en- us/library/azure/dn790557.aspx)表示“您使用以下命令对资源执行的所有任务必须使用Azure Active Directory对Azure资源管理器进行身份验证。
因此,您需要使用您的subscription-id,tenant-id,client-id和client-secret修改身份验证配置代码,如下所示:
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.windows.net/" + "<your tenant id>", false, service); // TODO: add your client id and client secret ClientCredential cred = new ClientCredential("<your client id>", "<your client secret>"); 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; } Configuration config = ManagementConfiguration.configure( null, new URI("https://management.core.windows.net), "<your-subscription-id>", getAccessTokenFromServicePrincipalCredentials() .getAccessToken() );
有关适用于Java的ServicePrincipal的完整身份验证代码,请参阅https://github.com/Azure/azure-sdk- for-java/blob/master/azure-mgmt-samples/src/main/java/com/microsoft/ azure / samples / authentication / ServicePrincipalExample.java。
对于线程(使用azure java sdk在Windows azure中检索订阅的网络列表)的URL,它会移动https://github.com/Azure/azure-sdk-for-java/blob/master/service- management/ azure-svc-mgmt-network / src / main / java / com / microsoft / windowsazure / management / network / NetworkOperations.java。