我们有一个应用程序,它使用本地AD来获取用户信息。有些客户希望迁移到云并使用Azure AD。我们扩展了应用程序以通过owin签署用户,现在我们通过Microsoft Graph获取用户。
但是,从Microsoft Graph我们没有获得完整的用户配置文件。我们想要获取用户的所有属性,而不仅仅是基本属性。
var client = new RestClient(string.Format("https://graph.microsoft.com/v1.0/users/{0}", userEmail));
request = new RestRequest();
request.Method = Method.GET;
request.AddHeader("Authorization", _token.Token);
var reponse = client.Execute(request);
这只给了我一些信息,例如我从这里得不到'部门'。
是否可以在azure中配置应该返回的内容,如果是,那么在哪里?或者我需要/users/
以外的其他内容吗?
不同的客户可能需要获取不同的特殊属性。因此,最好的解决方案是让端点调用并获取所有内容,包括azure广告中不标准的特殊属性。之后,我可以解析它在我身边。这可能吗?
app har读取基本和完整配置文件的权限。我还需要更多东西吗?
答案 0 :(得分:6)
这是图谱API的正常行为,请参阅文档here和此摘录:
默认情况下,仅返回一组有限的属性(
businessPhones
,displayName
,givenName
,id
,jobTitle
,mobilePhone
,officeLocation
,preferredLanguage
,surname
,userPrincipalName
)。要返回备用属性集,您必须指定所需的属性集 使用OData
$select
查询参数设置用户属性。对于 例如,要返回displayName,givenName和postalCode 使用将以下内容添加到您的查询中$select=displayName,givenName,postalCode
您必须在select中指定所有字段,因为$select=*
只会输出Graph API实现中的关键字段。
所以你将无法得到你所要求的(可变自定义字段)。
可以在here
找到有关用户字段的更多信息答案 1 :(得分:1)
如NicolasR所述,您必须使用“$ select”参数列出要检索的所有字段;如果你想要检索自定义字段,你可以将它们添加到上一个参数(如果你知道它们的名字),或者你可以使用“$ expand = extensions”
答案 2 :(得分:1)
User user = await graphServiceClient
.Users[emailId]
.Request()
.Select(aadUser => new
{
aadUser.Id,
aadUser.UserPrincipalName,
aadUser.DisplayName,
aadUser.GivenName,
aadUser.Surname,
aadUser.City,
aadUser.MailNickname,
aadUser.UserType
})
.GetAsync()
.ConfigureAwait(false);