【问题标题】:Query only basic UserInfo from Azure AD with limited permissions仅从具有有限权限的 Azure AD 中查询基本 UserInfo
【发布时间】:2017-10-13 10:56:18
【问题描述】:

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

我可以进行身份​​验证,我已获得应用注册中定义的角色的授权。到目前为止,一切都很好。 我可以查看我自己的用户资料。这使用 Microsoft.Azure.ActiveDirectory.GraphClient 包来构建查询,而不是手动创建 HTTPRequest。

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 似乎没有源代码,常用的 Graph API doesn't even mention selecting only basic info.

“简单”的解决方案是“获得更多应用程序权限”,但这需要大量时间来通过官僚机构。而且我应该能够收到所有用户的邮件,对吧?

【问题讨论】:

  • 能否请您显示GetTokenForApplication 函数?请尝试使用online tool 解码访问令牌并检查scpclaim 中的权限。
  • 非常有用,我现在可以比较从本地工作版本和 webapp 版本获得的令牌。我缺少权限,已选中该框,但权限从未授予。叹息。

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


【解决方案1】:

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

起初我以为我的令牌缓存有问题。它是。然后我修好了。仍然有错误。

通过使用 Nan Yu 链接的 online tool 查看不同应用程序中的几个令牌,我发现我缺少在我的令牌中查看用户基本资料的实际权限。 我还是没拿到token里的权限,发现即使勾选了“Delegated Permissions”下的复选框,之后“Grant Permissions”选项也没有成功使用。

PSA:不要假设所有选中的框都被实际授予。签入应用服务它拥有哪些权限。如果您的公司允许您这样做,那就是。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 2011-08-27
    相关资源
    最近更新 更多