1

Microsoft.Azure.ActiveDirectory.GraphClient バージョン 2.1.1.0 を使用して、ユーザーが属するグループを取得しています。メソッド呼び出しは次のようになります。

ActiveDirectoryClient activeDirectoryClient = new ActiveDirectoryClient(
                                        new Uri(GraphUrl),
                                        async () => await GetAppTokenAsync());

IEnumerable<string> groups = GetGroupsAsync(activeDirectoryClient, "currentUserObjectId").Result;

private static async Task<IEnumerable<string>> GetGroupsAsync(ActiveDirectoryClient activeDirectoryClient, string currentUserObjectId )
{
    return await activeDirectoryClient.Users.GetByObjectId(currentUserObjectId).GetMemberGroupsAsync(true);

}

private static async Task<string> GetAppTokenAsync()
{
            var authContext = new Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext(ServiceRoot);
            var token = await authContext.AcquireTokenAsync(GraphUrl,new ClientCredential("clientId", "clientSecret"));
            return token.AccessToken;
}

ただし、Fiddler ではリクエストが成功し、正しいグループが含まれていることがわかりますが、メソッドはハングします。

私の質問は、Azure ActiveDirectory Graph API GraphClient not return AD Groupsの複製です。回避策はありますが、この方法が機能しない理由は説明されていません。

4

2 に答える 2

0

実際に ServiceRoot の値が ActiveDirectoryClient のインスタンス化と AuthenticationContext の呼び出しで同じである場合、それが問題の原因である可能性があります。

ActiveDirectoryClient はhttps://graph.windows.net/でインスタンス化する必要があります

AuthenticationContext は https://login.microsoftonline.com/で呼び出す必要があります

それはメソッドのハングや成功したリクエストには現れませんが、それが機能するためにコードに加えなければならなかった唯一の変更でした。そうしないと、Not Found エラーが返されます。

于 2016-02-12T23:36:31.347 に答える
0

Result プロパティを使用すると、Graph Api ライブラリで同様の問題が発生しました。呼び出しを次のように変更してみてください。

IEnumerable<string> groups = await GetGroupsAsync(activeDirectoryClient, "currentUserObjectId");
于 2016-02-17T14:13:48.330 に答える