2017-07-31 7 views
0

私はAzure Active DirectoryからMicrosoftのGraph API経由でユーザーのデータを読み取ろうとしています。グラフエクスプローラを使用する私はすべてのユーザーを取得できますが、スタンドアロンアプリケーションを使用すると、トークンを受け取った後に「承認されていない」応答が返されます。私は明らかにいくつかのステップを欠いていますが、それは私には明らかなステップではありません。Microsoft Graph Apiトークンが無効または承認されていませんか?

// config values 
// authority = "https://login.microsoftonline.com/{ TENANT ID }/oauth2/" 
// resource uri = "https:// APP NAME .azurewebsites.net"; 
// graph uri = https://graph.windows.net/TENANT ID/ also tried https://graph.windows.net/v1.0/ 


// short form 
public async void GetUsers(ADConfiguration config) 
{ 
    _authContext = new AuthenticationContext(config.GetAuthority()); 
    _clientCredential = new ClientCredential(config.ClientId, config.ClientSecret); 

    AuthenticationResult result = null; 

    // obtain the token, this part is still successful 
    result = await _authContext.AcquireTokenAsync(config.ResourceUri, _clientCredential); 

    _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken); 


    string address = config.GetGraphiUri() + "users?api-version=1.6"; 

    // this response is always unauthorized 
    HttpResponseMessage response = await _httpClient.GetAsync(address); 

} 

答えて

0

あなたの設定値はオフに思える::

次のコードは、MSFTのサンプルをオフに基づいて認識されるであろう任意の洞察力

当局する必要があります:https://login.microsoftonline.com/{TENANT ID}

あなたがAzureのADグラフAPIではなく、MicrosoftグラフAPIを使用しようとしているように私には思えます。その場合

リソースURIは次のようになりますhttps://graph.windows.net/。あなたの新しい問題に答えるためにまた

+0

感謝。提案は、エラーメッセージを「許可されていない」から「禁止された」に変更しました。私が推測している横方向の動き... 私は、リソースuriがAzureのADサーバーを参照すると信じています。いずれにしても、どちらのバリエーションもあまり成功していなかった。 – Mark

+0

禁止されていることは、あなたのアプリに必要な権限がないことを意味します。 Azure AD Graphに追加したことを確認してください。 – juunas

+0

「Windows Azure Active Directory」と「Microsoft Graph」という2つのAPIにはアクセス権があり、両方にすべての操作を行う権限があります。私はAPIアクセスを追加するために 'Azure AD Graph'を探しましたが、それはオプションとして出てこないのです。 – Mark

1

(MSグラフAPIはhttps://graph.microsoft.com/です)。あなたのコードから、client credential flowを使用してトークンを取得しています。クライアント資格情報フローでは、アクセス許可がアプリケーション自体に直接与えられます。

あなたはAzureのADグラフAPIを使用しているので、あなたはapplication permissionを追加する必要があります。Azureのポータルで

  1. Required permissionsセクションを選択し、[設定]メニューで
  2. Settingsをクリックして、アプリケーションを選択し、 Windows Azure Active Directory(Azure ad graph api)を選択し、アプリが必要とする関連アプリケーション許可を追加します。
  3. アプリのブレードの内側に、Grant Permissionsと打って、管理者の認証情報に同意します。答えを
+0

私はJuunasに「Windows Azure Active Directory」と「Microsoft Graph」の2つのAPIを持っていると言っていたように、どちらもすべてのことを行う権限を持っています。 私はここに、基本的な何かを見下ろすだ疑い... – Mark

+0

[このツール](http://jwt.calebb.net/)を使用してアクセストークンをデコードし、任意のアプリケーションのアクセス許可が 'roles'特許請求の範囲に含まれるかどうかを確認してください –

+0

ナンがあなたに指摘したトークン・デコーダのサイトは、将来消えるかもしれません。代わりにこれを使用してください(機能的に同等です):https://jwtinspect.azurewebsites.net/。 @MarkはあなたがAADかMicrosoft Graphを使っているのですか?いずれの場合も、client_credentialsフローを使用している場合、管理者はAPI呼び出しの承認/許可を与える必要があります。 –

関連する問題