不允许用户同意应用程序代表他们访问公司的数据
我们正在尝试从Azure Entra获取当前用户的同意权限,以下是我们执行的步骤。我尝试通过自动化使用多种REST API来实现,但期望的值似乎没有出现。
尝试通过PowerShell脚本来捕获。
企业应用 > 同意与权限 > 在那里我想查看已启用的现有用户设置选项。 (检查是否已启用)
手动执行这些步骤如下:
- 打开 https://entra.microsoft.com。
- 身份 > 应用程序 > 用户设置。
- 验证同意是否已禁用。
有没有可以获取到这个的REST API?
解决方案
Portal中用于确定勾选项的逻辑并不完全清晰,但下面给出一个估算:你可以通过查询 Get authorizationPolicy 来获取用户同意设置,并从 defaultUserRolePermissions 中检查 permissionGrantPoliciesAssigned 属性:
Connect-MgGraph -Scopes Policy.Read.All
$uri = 'v1.0/policies/authorizationPolicy?$select=defaultUserRolePermissions'
$req = Invoke-MgGraphRequest GET $uri
$req.defaultUserRolePermissions.permissionGrantPoliciesAssigned
关于 defaultUserRolePermissions 的细节:
表示是否允许用户对应用进行同意,以及如果允许,应该赋予哪种权限来授权同意,以及哪些应用同意策略(permissionGrantPolicy)会为用户授予同意的权限进行管理。值应采用
managePermissionGrantsForSelf.{id}的格式,其中{id}是内置或自定义 应用程序同意策略 的ID。一个空列表表示不允许用户对应用进行同意。
然后查看 内置同意策略 时,出现如下警告:
microsoft-user-default-recommended 和 microsoft-user-default-allow-consent-apps 是Microsoft管理的策略。策略中包含的条件会根据微软对最终用户同意的最新安全建议自动更新。
所以我的估算是:
$policies = $req.defaultUserRolePermissions.permissionGrantPoliciesAssigned
if ($policies.Where{ $_ -match '^managePermissionGrantsForSelf\.' }.Count -eq 0) {
# this means that the first option is checked
}
elseif ($policies -match '\.microsoft-user-default-(?:recommended|allow-consent-apps)') {
# this means that the last option is checked
}
else {
# the middle option is checked
}
就我而言,中间的选项被选中,如果我检查 permissionGrantPoliciesAssigned 的数组,我得到 ManagePermissionGrantsForSelf.microsoft-user-default-low,根据文档这是:
- microsoft-user-default-low:默认情况下,成员类型的用户可以对所有低风险权限进行同意。
