2017-07-26 4 views
1

J'essaie de configurer une application Java native qui utilisera l'API de MS Graph pour accéder aux utilisateurs OneDrive après l'authentification à l'aide de ADAL4j. J'utilise la bibliothèque this pour obtenir mon jeton d'accès. Jusqu'à présent, j'ai ce code:Échec de la validation du jeton d'accès de l'API Microsoft Graph (java)

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.util.concurrent.ExecutorService; 
import java.util.concurrent.Executors; 
import java.util.concurrent.Future; 

import javax.naming.ServiceUnavailableException; 

import com.microsoft.aad.adal4j.AuthenticationContext; 
import com.microsoft.aad.adal4j.AuthenticationResult; 

public class Get { 

    private final static String AUTHORITY = "https://login.windows.net/common/oauth2/v2.0/authorize"; 
    private final static String CLIENT_ID = "29275...011a"; 
    private final static String RESOURCE = "https://graph.windows.net"; 


    public static void main(String[] args) throws Exception { 

     try (BufferedReader br = new BufferedReader(new InputStreamReader(
      System.in))) { 
      System.out.print("Enter username: "); 
      String username = br.readLine(); 
      System.out.print("Enter password: "); 
      String password = br.readLine(); 

      AuthenticationResult result = getAccessTokenFromUserCredentials(
       username, password); 
      System.out.println("Access Token - " + result.getAccessToken()); 
      System.out.println("Refresh Token - " + result.getRefreshToken()); 
      System.out.println("ID Token - " + result.getIdToken()); 
      System.out.println("Expires in - " + result.getExpiresAfter()); 
     } 
    } 

    private static AuthenticationResult getAccessTokenFromUserCredentials(
     String username, String password) throws Exception { 
     AuthenticationContext context = null; 
     AuthenticationResult result = null; 
     ExecutorService service = null; 
     try { 
      service = Executors.newFixedThreadPool(1); 
      context = new AuthenticationContext(AUTHORITY, false, service); 
      Future<AuthenticationResult> future = context.acquireToken(RESOURCE, CLIENT_ID, username, password, null); 
      result = future.get(); 
     } finally { 
      service.shutdown(); 
     } 

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

} 

Quand je cours, j'entrez les informations d'identification de compte alors le jeton d'accès, de rafraîchissement jeton, un jeton d'identité, et arrive à échéance dans le temps sont imprimés. J'utilise ensuite chromes "Advanced Rest Client" pour tester le jeton d'authentification (capture d'écran ci-dessous).

screenshot

Et puis je reçois l'erreur de validation jeton d'accès indiqué au bas de la capture d'écran. Je ne comprends pas la raison pour laquelle le jeton ne fonctionne pas. J'ai des autorisations configurées sur l'application enregistrée dans Azure AD et l'utilisateur a déjà donné l'autorisation à l'application. La seule chose que je peux penser est que peut-être les portées ne sont pas spécifiées mais je ne suis pas sûr que ce soit le problème. Et si c'est comment puis-je les spécifier?

+0

Salut, je suis en train de développer une application avec le soutien onedrive en utilisant l'API graphique en Java. Avez-vous trouvé un SDK pour le faire? – cyberjoac

+0

Il y en a un pour le morceau d'authentification (qui est fait par azure) appelé adal4j, code source [ici] (https://github.com/AzureAD/azure-activedirectory-library-for-java). En ce qui concerne l'interaction avec le graphique OneDrive, il n'y en a pas actuellement. J'ai fini par utiliser des bibliothèques java.net intégrées pour faire des appels http à graver. –

Répondre