仅从Azure AD查询具有有限权限的基本UserInfo

时间:2017-10-13 10:56:18

标签: c# asp.net-mvc azure visual-studio-2017 azure-ad-graph-api

我正在努力建立一个公司所有员工的电子邮件列表。 这是在Azure上运行的Web应用程序,具有Azure AD身份验证。该应用程序使用.NET Framework 4.6,并使用Microsoft.Owin.Security包连接到Azure AD。

我可以进行身份​​验证,我是通过应用注册中定义的角色授权的。到现在为止还挺好。 我可以查看我自己的用户个人资料。这使用Microsoft.Azure.ActiveDirectory.GraphClient包来构建查询,而不是手动创建HTTPRequests。

string userObjectID = ClaimsPrincipal.Current
    .FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;

ActiveDirectoryClient activeDirectoryClient = new ActiveDirectoryClient(serviceRoot,
    async () => await authorizationHelper.GetTokenForApplication());

var result = await activeDirectoryClient.Users
    .Where(u => u.ObjectId.Equals(userObjectID))
    .ExecuteAsync();

IUser user = result.CurrentPage.ToList().First();

AD计算我的查询,看到它只返回我,并推断我被允许查看我自己的信息。执行成功,只返回我。

在另一个页面上,我想显示公司中使用的邮件地址(标记用户,预先输入,检查是否存在等)。我尝试以下操作:

result = await activeDirectoryClient.Users
    .ExecuteAsync();
return result.CurrentPage
    .ToList();

这失败了,“权限不足”。我不允许我查看整个用户。我的委派权限是“读取所有用户的基本配置文件”,meaning

  

允许该应用阅读该中所有用户的基本个人资料   组织代表已登录的用户。以下属性   包含用户的基本配置文件:显示名称,名字和姓氏,   照片和电子邮件地址。

所以,我尝试过滤:

result = await activeDirectoryClient.Users
    .Where(u => u.Mail.StartsWith(str))
    .ExecuteAsync();
return result.CurrentPage
    .ToList();

但这仍然给了我整个用户,而且我再次被“权限不足”所击中。所以我试试

result = await activeDirectoryClient.Users
    .Where(u => u.Mail.StartsWith(str))
    .Select (u => u.Mail)
    .ExecuteAsync();
return result.CurrentPage
    .ToList();

这给出了神秘的运行时错误(荷兰语免费翻译)

GenericArguments[1], System.String, Microsoft.Azure.ActiveDirectory.GraphClient.Extensions
.ReadOnlyQueryableSet.`2[TSource,TISource] conflicts with type TISource.

我不知所措。似乎没有源代码可用于ActiveDirectoryClient和通常的图谱API doesn't even mention selecting only basic info.

“简单”解决方案将“获得更多应用权限”,但这需要大量时间来完成官僚作风。我应该能够收到所有用户的邮件,对吧?

1 个答案:

答案 0 :(得分:0)

首先,您不需要对“仅使用有限权限从Azure AD查询基本UserInfo”执行任何特殊操作。您只需查询用户,它就会将您无权访问的任何字段初始化为nullInsufficient privileges表示根本不允许您查看用户。红旗。

起初我以为我的tokencache有问题。它是什么。然后我修好了。仍然是错误。

通过查看Nan Yu链接的online tool在不同应用程序中的几个令牌,我发现我错过了在令牌中查看用户基本配置文件的实际权限。 我仍然没有获得令牌中的权限,并且发现即使选中了“委托权限”下的复选框,之后也没有成功使用“授予权限”选项。

PSA:不要假设所有选中的复选框都是实际授予的。在App Service中检查它具有哪些权限。如果您被公司允许,那就是。