1

に超過請求URIを照会するとき、私はそのユーザーを認証するために、テナントBによって発行されたトークンを受け入れるテナントAでのマルチテナントAADアプリを持っています。アプリケーションが要求するアクセス許可はデフォルトの最低レベルに設定されています。基本ユーザーのプロファイルを読み取ります。「権限が不十分」AADマルチテナントアプリ

テナントBからのユーザーは(非管理者)でログインすると、私は主張を見て、私も特許請求の範囲でユーザーのグループを送信するアプリを設定しました。グループの主張の中で、グループリストの代わりに、ユーザが200以上のグループのメンバーであり、それらのグループのリストを取得するためにそのURIを照会する必要があることを意味する "src1"参照が表示されています。

私はそのURIをクエリすると、 "不十分な特権"というエラーが返されます。私は実際に "/ me"というURIをユーザに照会し、彼の直属のマネージャとオフィスの場所まで照会することはできますが、自分のセキュリティグループを見ることはできません。

は、ユーザーが自分のアプリケーションによって認証されることに同意したときに、私は読むことを許可されています、またはそれが唯一の管理者がすることに同意することができます何かものの中に含まれるグループの請求はありますか?私が実際にそれらを見ることになっている場合、過大請求のURIを与えられれば、それらにアクセスする正しい方法は何でしょうか?

ありがとうございます!

UPDATE:コードに関する 詳細情報: 私は本(ない特定のチュートリアル)を使用していた、と私のコードはに住んでいる通知本体をAuthorizationCodeReceived、そして次のようになります。

だから、
var ClientId = "..."; 
// Notice the "common" 
var Authority = "https://login.microsoftonline.com/common"; 
var appKey = "..."; 
var resourceId = "https://graph.windows.net"; 
var code = context.Code; 
var authContext = new AuthenticationContext(Authority); 
var credential = new ClientCredential(ClientId, appKey); 
var result = authContext.AcquireTokenByAuthorizationCode(code, new Uri(HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Path)), credential, resourceId); 

var httpClient = new HttpClient(); 
httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", result.AccessToken); 

// I'm not very sure about this part - I tried different ways, but all request that "work" result in "Insufficient privileges" 
var p = new { securityEnabledOnly = true }; 
string postBody = JsonConvert.SerializeObject(p); 
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

var response = httpClient.PostAsync("<the src1 url>", new StringContent(postBody, System.Text.Encoding.UTF8, "application/json")).Result; 
+1

テナントBからあなたのアクセストークンは、あなただけのクエリテナントBのグループや他のapplications'にアプリの '権限は、権限を設定する必要がある場合。どのチュートリアルに従ったのですか?私はあなたが何かを見逃しているかどうかをチェックしたいと思っています... –

+0

正確なコードについての詳細情報を追加しましたが、私はグループを取得するさまざまな方法を試しましたが。私はgetMemberGroupsとgetMemberObjects(最初はsrc1のURLで参照されていました)でGETしようとしましたが、結果は常に同じです - 不十分な特権 – user2520968

答えて

0

私は自分の質問に答えることができると思う。 User.ReadにはUserエンティティの「宣言された」プロパティのみが含まれ、グループメンバシップはNavigationプロパティです。

グループへのアクセスを得るために、私は管理者の同意を必要とGroup.Read.All許可を要求する必要があります。ここで

が許可のドキュメントです: https://msdn.microsoft.com/Library/Azure/Ad/Graph/howto/azure-ad-graph-api-permission-scopes

そして、ここでは、エンティティの説明です: https://msdn.microsoft.com/Library/Azure/Ad/Graph/api/entity-and-complex-type-reference#userentity

それはすべてのドキュメントにあります、ただ読んで詳細に非常に気配りする必要があります。

0

追加:私はあなたのWebアプリがグラフAPIにアクセスする権限を持っていることを確認し、エラーなしであなたのコードを実行します。以下はコードですが、私はどこか簡略化しています。

 var ClientId = "***"; 
     // Notice the "common" 
     var Authority = "https://login.microsoftonline.com/tenantid"; 
     var appKey = "k***"; 
     var resourceId = "https://graph.windows.net"; 
     // var code = context.Code; 
     var authContext = new AuthenticationContext(Authority); 
     var credential = new ClientCredential(ClientId, appKey); 
     var result = authContext.AcquireToken(resourceId,credential); 

     var httpClient = new HttpClient(); 
     httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken); 

     // I'm not very sure about this part - I tried different ways, but all request that "work" result in "Insufficient privileges" 
     // var p = new { securityEnabledOnly = true }; 
     // string postBody = JsonConvert.SerializeObject(p); 
     httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

     var result1 = httpClient.GetAsync("https://graph.windows.net/tenantid/users?api-version=1.6").Result; 

     var jsonresult=result1.Content.ReadAsStringAsync().Result; 
+0

あなたのアプリケーションはどのようなアクセス権を要求しましたか?グループのsrc1 URLも取得しましたか?グループではなくユーザープロファイルにアクセスすることがわかります – user2520968

関連する問題