2016-08-07 13 views
2

Ich möchte verfügbare IP-VMs im neuen Azure-Portal mit Java SDK auflisten.azure java sdk authentication

Paar von Jahren zurück in der guten alten klassischen Portal, hatte ich die üblichen Management-Zertifikat-Prozedur für den Zugriff auf vm, erstellen vm und arbeiten mit Azure Endpoints.

Fast fwd jetzt sehe ich, dass sie ein neues Portal und neue Mechanismen verwendet haben, um mit Java SDK zu interagieren. Ich habe irgendwo im obigen Link gelesen, dass ich mit dem alten Weg mit Zertifikaten nur die Klassenportalressourcen verwalten kann.

Ich versuche, ein einfaches Programm zu programmieren, das die VMs des neuen Portals als Start authentifiziert und auflistet. Es scheint, als hätten sie es sehr kompliziert gemacht.

folgte ich den folgenden Link in "Dienstprinzipal mit Passwort erstellen"

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

Dann ging ich zu diesem Link

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

, die ich gehen, fragten die „Sehen, wie man Erstellen Sie eine Auth-Datei "Link in der obigen Seite

(meins ist keine Webapp und wenn ich versuche, t zu erstellen er AD als native Client-Anwendung, ist es nicht erlaubt mir Schlüssel in configure Registerkarte zu speichern, so hatte ich einen Web-app)

Nachdem ich all dies zu schaffen, habe ich mit diesen unter Fehlern steckt

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) 

Wenn ich überprüft habe, dass der Fehler liegt, weil ich keine gültige Client-Anwendungs-ID in Ihrem Azure Active Directory habe.

Gibt es eine einfache Möglichkeit, die APIs zu authentifizieren und zu starten?

Antwort

1

@Vikram, ich schlage vor, dass Sie versuchen können, auf die article verweisen, um eine Anwendung auf AAD zu erstellen.

Dann können Sie den folgenden Code befolgen, um das Zugriffstoken für die Authentifizierung zu erhalten.

// 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(); 

Wenn Sie die VMs auf neues Portal zur Liste mögen, können Sie versuchen, das REST-API zu verwenden List the resources in a subscription, um alle Ressourcen zu erhalten und die VMs über den Ressourcentyp Microsoft.Compute/virtualMachines filtern.

Ich hoffe, es hilft.