2017-07-26 85 views
1

私は、ADAL4jを使用して認証した後、ユーザーのOneDriveにアクセスするためにMS GraphのAPIを利用するネイティブJavaアプリケーションを設定しようとしています。私は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トークンその後、アカウントの資格情報を入力し、時間に失効するが、すべて印刷されます。次に、クロム「Advanced Rest Client」アドオンを使用して認証トークンをテストします(下のスクリーンショット)。

screenshot

そして私は、スクリーンショットの下部に示したアクセストークンの検証エラーを取得します。トークンが動かない理由を理解できません。 Azure ADに登録されているアプリに権限が設定されており、ユーザーは既にアプリに許可を与えています。私が考えることができるのは、おそらくスコープが指定されていないことですが、それが問題であるかどうかはわかりません。それはどうすれば指定するのですか?

+0

こんにちは、私はJavaでグラフAPIを使用してOneDriveサポートしたアプリを開発しようとしています。あなたはそれを行うためのSDKを見つけましたか? – cyberjoac

+0

adal4jというソースコード(ここではhttps://github.com/AzureAD/azure-activedirectory-library-for-java)と呼ばれる認証ピース(これは紺碧で行われます)用のものがあります。 OneDriveグラフとの対話に関しては、現在のところありません。私はグラフにhttp呼び出しを行うためにjava.netライブラリに組み込まれた使用を終了しました。 –

答えて

関連する問題