为什么某些非空的 AAD 配置文件字段的 graphClient.Me.Request().GetAsync() return 为空值?

Why does graphClient.Me.Request().GetAsync() return null values for some AAD profile fields that are not null?

我正在使用 Graph API 从 UWP 应用访问用户信息。我将 Azure 应用服务与客户端 UWP 应用和 Azure 后端一起使用。

我的 Azure Active Directory 只有我和一个测试用户。我的应用程序中的以下几行 return 我的一些来自 AAD 的信息:

Microsoft.Graph.GraphServiceClient graphClient =
        new Microsoft.Graph.GraphServiceClient(new DelegateAuthenticationProvider((requestMessage) =>
{
       requestMessage.Headers.Authorization =
           new System.Net.Http.Headers.AuthenticationHeaderValue("bearer", result2.AccessToken);
       return Task.FromResult(0);
}));

Microsoft.Graph.User user = await graphClient.Me.Request().GetAsync();

但是,当我在调用后检查 "user" 变量的内容时,除 DisplayName、GivenName、ID、JobTitle、AdditionalItems 和 UserPrincipleName 之外,所有字段都列为空。不为空的值是正确的。但是,我还填写了所有街道地址字段,并为我在 AAD 上的个人资料提供了个人资料图片。但是这些也返回空值。谁能告诉我是什么原因造成的? (我检查了随请求一起发送的访问令牌,它似乎确实包含所需的权限。为了确保,我在注册时请求了 Windows Azure AD 和 Microsoft Graph 的所有委托所需权限我在 AAD 中的应用程序。)

谢谢。

Microsoft Graph return 是每个响应中的默认核心属性集。您可以使用 $select 查询参数来获取其他属性。

例如,GET https://graph.microsoft.com/v1.0/me/ 不会 return 用户的 streetAddress 字段,但 GET https://graph.microsoft.com/v1.0/me/?$select=streetaddress return 是它。您可以通过用 $select=id,jobTitle,streetAddress.

等逗号分隔字段来取回多个属性

对于 .NET SDK,我相信语法是 Request().Select("assignedLicenses").GetAsync()documentation for this is on GitHub.