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();
在我的应用程序中授权 Scopes
:User.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();
在我的 UWP
应用程序中,我正在使用 Microsoft Graph SDK。我的 Azure
帐户共有 13 个用户,我想使用以下查询在我的 UWP
应用程序中显示这些用户。但是查询只返回一个(登录用户)。即使我以 Global admin
登录,也会发生这种情况。而且,用户的userType
显示为Null
var users = await graphClient.Users.Request()
.Select("displayName, userPrincipalName, userType")
.GetAsync();
在我的应用程序中授权 Scopes
:User.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();