从 Web Api 调用 Graph Api 不会返回所有用户数据
Posted
技术标签:
【中文标题】从 Web Api 调用 Graph Api 不会返回所有用户数据【英文标题】:Calling Graph Api from Web Api doesn't return all user data 【发布时间】:2021-12-12 16:29:31 【问题描述】:在我的 ASP.NET Core Web Api 中,我尝试调用 Graph API 来检索组织中其他用户的数据。我正在使用代表流程。引导令牌是从 SPA 客户端代码传入的。
在启动代码中,我有:
builder.Services
.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(builder.Configuration)
.EnableTokenAcquisitionToCallDownstreamApi()
.AddMicrosoftGraph("https://graph.microsoft.com/beta", "user.read user.readbasic.all profile")
.AddInMemoryTokenCaches();
在Controller的Action中,我有:
_graphServiceClient.Users.Request()
.Filter($"mail eq 'someuser@myorg.com'")
.Select((user) => new
DisplayName = user.DisplayName,
City = user.City,
Country = user.Country,
BusinessPhones = user.BusinessPhones
)
.Request()
.GetAsync();
但是,在运行时,我只能得到 DisplayName
值。我不明白 City、Country 或 BusinessPhones 的值。他们是null
。
当我在 Graph Explorer 中尝试相同的查询时,我看到了所有这些查询的值。
我错过了什么?
【问题讨论】:
您有什么理由使用 beta API 而不是 1.0 API? 你在api权限中启用profile
了吗?
【参考方案1】:
首先,你的代码 sn-p 有一个错误,你写了 2 .Request()
,你应该删除一个。
您使用的任何流程都在生成访问令牌,以便您可以访问 api,因此当您从 api 获得正确的数据时,这意味着您在使用流程时具有正确的设置,所以我认为如果有任何问题,它应该位于调用api的部分。然后我在我身边做了一些测试。
请问您是否可以直接调用api,您可以获得City, Country and BUsinessPhones
这3个属性的值吗?根据我的测试,当我调用 api 时,我可以得到如下截图所示的响应,默认情况下它是 null
https://graph.microsoft.com/beta/users?$filter=maileq 'tinywang@xxx.onmicrosoft.com'&$select=mail,city,country,DisplayName,BusinessPhones,userType,usageLocation
当我跟随this tutorial通过sdk调用api时,我得到了同样的结果:
我的想法是先检查调用 api 的响应,如果我们找不到问题,那么您能否提供您遵循的教程以帮助重现问题。
【讨论】:
以上是关于从 Web Api 调用 Graph Api 不会返回所有用户数据的主要内容,如果未能解决你的问题,请参考以下文章
AAD Graph API在调用AcquireTokenAsync后返回404,但在调用AcquireTokenSilentAsync后不返回404