2017-03-01 5 views
0

私たちのアプリケーションは単純なUser.ReadBasic.All関数を実行します。これは、私が理解しているところでは、管理者権限を必要としません。 https://graph.microsoft.io/en-us/docs/authorization/app_onlyAuthorization_IdentityNotFoundエラーMSグラフAPI

  POST https://login.microsoftonline.com/{tenantId}/oauth2/token    HTTP/1.1 
     Content-Type: application/x-www-form-urlencoded 

     grant_type=client_credentials 
     &client_id=<clientId> 
     &client_secret=<clientSecret> 
     &resource=https://graph.microsoft.com 

私は、有効なアクセストークンを取得することができています、次のエラーメッセージが返されたグラフ呼び出すときしかし:

  “code": "Authorization_IdentityNotFound", "The identity of the calling application could not be established." 

を我々は我々のアプリを設定しているここに文書フローを使用して 管理コンソールでUser.ReadAll.Basic権限を持っていると面白いのは、独自のクレデンシャル/トークンキャッシュを使用してAppIdと秘密のConfidentialClientApplicationインスタンスをスピンアップするときに、APIから成功した結果を返すことですトークンのAcquireTokenSilentAsyncを呼び出す:

 string signedInUserID = ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier).Value; 
     tokenCache = new SessionTokenCache(
      signedInUserID, 
      HttpContext.Current.GetOwinContext().Environment["System.Web.HttpContextBase"] as HttpContextBase); 

     ConfidentialClientApplication cca = new ConfidentialClientApplication(
      appId, 
      redirectUri, 
      new ClientCredential(appSecret), 
      tokenCache); 

しかし、私たちはユーザーとのやりとりがないため、ユーザー資格情報とトークンキャッシュで返信してアクセストークンを取得したくないことが理想的です。私はなぜ1つのシナリオが動作し、もう1つがIdentityNotFoundエラーを返すのか分かりません。あなたが持っているアドバイスは大歓迎です。

+0

これを解決できましたか?私は同じ問題を抱えています – NBajanca

+0

こんにちは@NBajancaはい、私たちがアクセスしようとしている特定のスコープの管理者権限に関する問題でした。私たちのアプリケーションに、管理者からディレクトリデータを読み込むためのアクセス権がテナントで取得されたら、アプリID(私たちはアプリの秘密よりも安全な証明書を使用することにしました)に問い合わせることができました。その他の質問があればお知らせください – ranah

+0

ありがとう、私はその間にもそれを見つけました。私はMicrosoftのグラフのドキュメントで、彼らがスコープをより良く説明できるかどうかを確認するために問題を作りました – NBajanca

答えて

0

私が理解しているところでは、管理者のアクセス許可は必要ありません。

AFAIK、クライアントの資格情報フローを使用する場合は、アプリケーションへのアプリケーション権限をアプリに設定する必要があります。代理権限は委任されたフローに使用されます。

あなたはADALを使用してユーザーを取得するためのコードの下に試みることができる:

 string authority = "https://login.microsoftonline.com/a703965c-e057-4bf6-bf74-1d7d82964996"; 
     AuthenticationContext authenticationContext = new AuthenticationContext(authority, false); 
     var result= await authenticationContext.AcquireTokenAsync("https://graph.microsoft.com", new ClientCredential("clientid", "clientsecret")); 


     string sURL = "https://graph.microsoft.com/v1.0/users"; 

     WebRequest request1 = WebRequest.Create(sURL); 
     request1.Method = "GET"; 
     request1.Headers.Add("Authorization", "Bearer " + result.AccessToken); 
     HttpWebResponse response1 = (HttpWebResponse)request1.GetResponse(); 
     if (response1.StatusCode == HttpStatusCode.OK) 
     { 
      // some code 
     } 

あなたは(テスト用)Microsfotグラフのためのアプリケーションのアクセス許可 "のすべてのユーザーの完全なプロファイルを読む" に設定できます。

​​

関連する問題