尽管已授予所有管理员权限,但“需要管理员批准”

时间:2021-05-14 11:52:00

标签: permissions azure-active-directory openid-connect

我在 AAD 中注册了一个客户端和一个服务器应用程序。服务器应用程序的权限如下:

Server permissions

因此,“普通”用户无法授予的权限由管理员预先授予。另一方面,允许用户授予的所有内容不应由管理员预先授予,而是由用户授予 - 通过同意屏幕。因此,每当用户使用该应用程序时,她都需要同意 Calendars.ReadWriteContacts.ReadWrite

客户端只有访问服务端API的权限:

enter image description here

用户尝试使用应允许访问整个服务器 API (api://<server-app-id>/.default) 的范围通过客户端应用程序 ID 获取令牌。但是,这样做时,用户在登录后看不到同意屏幕,而是出现以下错误屏幕:

enter image description here

我不明白,因为管理员已经预先授予了所有超能力权限,对吗?我可以通过执行以下操作之一来“修复”它,但对我来说似乎没有什么是正确的:

  • 向管理员授予客户端应用权限“user_impersonation”的同意。然后不会显示同意屏幕,因为一切都已被授予。
  • 向管理员同意其余的服务器应用权限(“offline_access”似乎不需要管理员同意)。同意屏幕也没有显示。
  • 完全删除需要管理员同意 (*.All) 的服务器应用权限。这甚至具有预期的效果,即为剩余的两个权限显示同意屏幕。但当然服务器将无法使用管理员权限。

我还尝试将 *.All 权限替换为(授予的)application 权限。这导致了类似的错误。

是否可以只授予管理员权限而让用户授予非管理员权限?

编辑: 当我尝试使用管理员帐户登录我的应用时,我没有看到错误屏幕,但我必须同意所有权限 - 即使是那些应该已经被授予的权限:

enter image description here

看起来管理员只授予一部分权限不起作用,对吗?

1 个答案:

答案 0 :(得分:0)

用户当然可以同意不需要管理员同意的权限,您可以在 Azure 门户中进行设置。

  • 以全局管理员身份登录 Azure 门户。
  • 选择 Azure Active Directory > 企业应用程序 > 同意并 权限 > 用户同意设置。

enter image description here


添加

/.default 范围通常用于 v2.0 端点,而 /.default 范围可用于任何 OAuth 2.0 流程。但是,/.default 范围不是强制性的。一般用于以下两种认证流程:

  1. 客户凭证流。如果您的权限是application permissions,则必须使用/.default范围,因为应用权限不涉及用户,所以管理员必须同意所有应用权限。

  2. OBO 流程。由于 OBO 流程涉及中间层,您必须使用 /.default 对所有权限进行预授权。

由于您当前使用的是委托权限,因此您不需要使用 /.default 范围。