2017-07-26 65 views
1

我想設置一個原生的Java應用程序,它將在使用ADAL4j進行身份驗證後,利用MS Graph的API訪問用戶OneDrive。我正在使用this庫來獲取我的訪問令牌。到目前爲止,我有這樣的代碼:Microsoft Graph API訪問令牌驗證失敗(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; 
    } 

} 

當我運行它,我進入帳戶憑據,然後訪問令牌,令牌刷新,ID令牌,並在時間結束都打印出來。然後我使用chromes「Advanced Rest Client」插件來測試auth令牌(下面的截圖)。

screenshot

然後我得到的截圖下方所示的訪問令牌驗證錯誤。我不明白令牌不起作用的原因。我在Azure AD中註冊的應用上設置了權限,並且該用戶已授予該應用的權限。我能想到的唯一的事情是,可能範圍沒有指定,但我不確定這是問題。如果是我如何指定它們?

+0

嗨,我試圖開發使用圖形API在Java中OneDrive支持的應用程序。你有沒有找到一個SDK來做到這一點? – cyberjoac

+0

有一個用於認證的部分(通過天藍色完成)稱爲adal4j,源代碼[here](https://github.com/AzureAD/azure-activedirectory-library-for-java)。至於與OneDrive圖形進行交互,目前還沒有。我最終使用內置的java.net庫來調用http來調用圖。 –

回答

相關問題