2017-09-27 13 views
2

Microsoft Graph APIを使用してOffice 365アカウントにアクセスする際に問題が発生しました。グラフ365経由のOffice 365アクセス

最初の問題は、Office 365サブスクリプションのすべてのユーザーを一覧表示しようとしているJavaプログラムがあることです。 https://graph.microsoft.com/v1.0/users/に電話していますが、403 forbiddenが返ってきています。

アプリの登録時に、私はUser.ReadUser.ReadBasic.AllUser.ReadWriteなどの権限を委任された権限とアプリの権限の両方に追加しました。

私もグラフエクスプローラを使用しようとしましたが、アカウントを使用するために入力すると、まだグラフの組み込みユーザーが使用され、アプリケーションのログイン情報は表示されません。これらが関連しているかどうかは不明です。ここで

は403

AuthenticationResult result = getAccessTokenFromUserCredentials(RESOURCE_GRAPH, ID, PASSWORD); 

URL url = new URL("https://graph.microsoft.com/v1.0/users/") ; 

HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

conn.setRequestMethod("GET"); 
conn.setRequestProperty("Accept", "application/json"); 
conn.setRequestProperty("Authorization", "Bearer "+result.getAccessToken()); 
if (conn.getResponseCode() != 200) { 
    throw new RuntimeException("Failed : HTTP error code : " 
      + conn.getResponseCode()); 
} 

、その結果、コードスニペットであり、ここでapps.dev.microsoft.comで扱うにトークン

private static AuthenticationResult getAccessTokenFromUserCredentials(String resource, 
                      String username, String password) throws Exception { 
     AuthenticationContext context; 
     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; 
    } 
+0

あなたは '/ users'に渡すトークンを取得するためにユーザーを認証していますか? –

+0

コード例で更新しました。 https://graph.microsoft.com/v1.0/me/を呼び出すと、私のユーザーを表すjson文字列が返されます。しかし、私は/ users /と呼ぶと403を取得します。私はsharepointエンドポイントokにアクセスしてサイトデータなどを取得することもできます。 – Gary

+0

User.ReadBasic.Allは管理者の同意が必要です、管理者の同意を得ようとしましたか?あなたはどこにアプリを登録しますか? –

答えて

1

アプリレジスタを取得する方法であり、 v2.0エンドポイントについて詳しくは、ここをクリックしてください。

v2.0 authentication protocolsAzure Active Directory v2.0 authentication librariesを使用してトークンを取得できます。認証時には、User.ReadBasic.Allの許可について、ユーザーの同意または管理者同意を行う必要があります。同意した後、アクセストークンには委任権限が含まれ、リストユーザー操作の呼び出し時に機能します。

+0

残念ながら、私はv2.0エンドポイントとライブラリを使用していましたが、アプリケーションに問題があるようです。登録ポータル。 – Gary

1

OK、回答を投稿する必要があります。まず、最も紛らわしいことに、apps.dev.microsoft.comの登録は動作していないようです(私がV2.0エンドポイントとバージョン2ライブラリを使用していたとしても)。

しかし、私はazureポータルを使って直接アプリを登録したとき、この問題が修正されました。その後私はそのサービスに正しくアクセスできました。

認証/認可サービスは私のアプリケーションの標準であり、Sharepoint/One Driveなどへのアクセスには完全に機能しましたが、ユーザエンドポイントにアクセスしたいときは、登録されていれば機能しますportal.azure.com。

ご協力いただきありがとうございます。