我在 AAD 中注册了一个客户端和一个服务器应用程序。服务器应用程序的权限如下:
因此,“普通”用户无法授予的权限由管理员预先授予。另一方面,允许用户授予的所有内容不应由管理员预先授予,而是由用户授予 - 通过同意屏幕。因此,每当用户使用该应用程序时,她都需要同意 Calendars.ReadWrite
和 Contacts.ReadWrite
。
客户端只有访问服务端API的权限:
用户尝试使用应允许访问整个服务器 API (api://<server-app-id>/.default
) 的范围通过客户端应用程序 ID 获取令牌。但是,这样做时,用户在登录后看不到同意屏幕,而是出现以下错误屏幕:
我不明白,因为管理员已经预先授予了所有超能力权限,对吗?我可以通过执行以下操作之一来“修复”它,但对我来说似乎没有什么是正确的:
我还尝试将 *.All 权限替换为(授予的)application 权限。这导致了类似的错误。
是否可以只授予管理员权限而让用户授予非管理员权限?
编辑: 当我尝试使用管理员帐户登录我的应用时,我没有看到错误屏幕,但我必须同意所有权限 - 即使是那些应该已经被授予的权限:
看起来管理员只授予一部分权限不起作用,对吗?
答案 0 :(得分:0)
用户当然可以同意不需要管理员同意的权限,您可以在 Azure 门户中进行设置。
添加:
/.default
范围通常用于 v2.0 端点,而 /.default
范围可用于任何 OAuth 2.0 流程。但是,/.default
范围不是强制性的。一般用于以下两种认证流程:
客户凭证流。如果您的权限是application permissions,则必须使用/.default
范围,因为应用权限不涉及用户,所以管理员必须同意所有应用权限。
OBO 流程。由于 OBO 流程涉及中间层,您必须使用 /.default
对所有权限进行预授权。
由于您当前使用的是委托权限,因此您不需要使用 /.default
范围。