Microsoft Graph API:总共 13 个用户中只返回一个用户

Microsoft Graph API: returning only one user out of total 13 users

在我的 UWP 应用程序中,我正在使用 Microsoft Graph SDK。我的 Azure 帐户共有 13 个用户,我想使用以下查询在我的 UWP 应用程序中显示这些用户。但是查询只返回一个(登录用户)。即使我以 Global admin 登录,也会发生这种情况。而且,用户的userType显示为Null

var users = await graphClient.Users.Request()
    .Select("displayName, userPrincipalName, userType")
    .GetAsync();

在我的应用程序中授权 ScopesUser.Read User.Read.All

显示所有用户列表的 Azure 门户:

注意:以上查询中UWP returns只有这些用户之一(登录用户)

API AzureRegistered App 中的权限:

更新:

回答用户@Allen Wu的询问:

a) 我安装了以下 NuGet 软件包:

Install-Package Microsoft.Toolkit.Uwp.Ui.Controls -Version 6.0.0
Install-Package Microsoft.Toolkit.Uwp.Ui.Controls.DataGrid -Version 6.0.0
Install-Package Microsoft.Toolkit.Graph.Controls -IncludePrerelease

我正在使用将变量 graphClient 设置为 ProviderManager.Instance.GlobalProvider.Graph;

b) 我已经使用倒数第三个帐户(Microsoft hotmail 帐户如图 1 所示)和倒数第二个帐户(Microsoft Outlook 帐户)测试了应用程序,我都使用了这两个帐户已分配全局管理员角色。但它们不是 Azure AD 帐户。

你应该提供你的代码,以便我修改或指出不正确的部分。

不过我已经找到原因了

微软hotmail账户和微软Outlook账户这两个账户其实就是MSA(微软个人账户)。

虽然他们已作为来宾用户添加到您的租户中,但如果您的身份验证端点是 common,则此帐户将被视为个人帐户,而不是此租户下的来宾用户。请参阅参考资料 here。在您的代码中,您默认使用 common,因此用户被视为 MSA,它只能获取自己的信息。

所以需要在请求中指定租户id。我不确定您是如何生成 graphClient 的。不过可以参考官方文档Authorization code provider and List users example.

不过还是记得修改WithAuthority.

这里有一个例子:

IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
    .Create(clientId)
    .WithRedirectUri(redirectUri)
    .WithAuthority("https://login.microsoftonline.com/{tenant id}/v2.0")
    .WithClientSecret(clientSecret) // or .WithCertificate(certificate)
    .Build();

AuthorizationCodeProvider authProvider = new AuthorizationCodeProvider(confidentialClientApplication, scopes);

GraphServiceClient graphClient = new GraphServiceClient(authProvider);

var users = await graphClient.Users
    .Request()
    .GetAsync();