Microsoft Graph PowerShell requires 'admin' consent for User.Read.All, when 'Allow user consent for apps' is selected

Microsoft Graph PowerShell requires 'admin' consent for User.Read.All, when 'Allow user consent for apps' is selected

我需要列出我的 AAD 用户的子集,确定管理员,如果管理员已被禁用,则禁用该用户。

我的帐户具有 'User Administrator' 和 'Global Reader' AAD 角色。

使用 AzureAD PowerShell cmdlet 可以轻松完成此任务,但是我想转换到 Microsoft Graph cmdlet。

我知道我需要范围 User.Read.All 所以我执行以下命令:

Connect-MgGraph -Scopes "User.Read.All"

当我通过 Web 界面登录时,会显示一个对话框,说明我需要管理员的同意(据我所知,管理员是具有全局管理员或应用程序管理员 AAD 角色的用户)。

在我的租户中,在 'Enterprise Applications > User Consent Settings' 下,选项 'Allow user consent for apps' 被选中。

这对我来说似乎是倒退了一步。我的用户具有执行所需操作的必要权限,但由于 MS Graph 使用企业应用程序,因此我需要管理员授予同意。

我的问题是:

  1. 管理员同意对话框会在我每次使用给定范围执行 Connect-MgGraph 时出现,还是仅在第一次出现?

  2. 有没有办法在没有管理员同意的情况下实现我的要求

问题 1

可以在 2 种情况下给予管理员同意

  1. 代表特定用户
  2. 代表您的组织(所有用户)

在管理员同意对话框中,上下文对应于复选框代表您的组织同意

如果您不代表整个组织表示同意,则将为每个用户显示管理员同意对话框,直到为该用户或整个组织授予同意。

问题 2

有两种权限

  1. 委派(又名作用域)
  2. 应用程序(又名角色)

所有应用程序权限都需要管理员同意,部分委派权限需要管理员同意。

本文档详细说明了哪些 MS Graph 权限需要管理员同意,来自 需要管理员同意

Microsoft Graph permissions reference

您可以看到 User.Read.All 委派权限确实需要管理员同意

User.Read.All permission reference

未经管理员同意,无法解决此问题。这提供了一种在更精细的级别上控制对应用程序的访问的方法。