Permissions &引用;需要管理员批准”;尽管授予了所有管理员权限
我有一个客户端和一个服务器应用程序都在AAD中注册。服务器应用程序的权限如下所示: 因此,“普通”用户无法授予的权限由管理员预先授予。另一方面,允许用户授予的所有内容不应由管理员预先授予,而是由用户通过同意屏幕授予。因此,每当用户使用该应用程序时,她都需要同意使用Permissions &引用;需要管理员批准”;尽管授予了所有管理员权限,permissions,azure-active-directory,openid-connect,Permissions,Azure Active Directory,Openid Connect,我有一个客户端和一个服务器应用程序都在AAD中注册。服务器应用程序的权限如下所示: 因此,“普通”用户无法授予的权限由管理员预先授予。另一方面,允许用户授予的所有内容不应由管理员预先授予,而是由用户通过同意屏幕授予。因此,每当用户使用该应用程序时,她都需要同意使用日历.ReadWrite和联系人.ReadWrite 客户端仅具有访问服务器API的权限: 用户尝试通过客户端应用程序应用程序id获取令牌,使用应允许访问整个服务器API的作用域(api:///.default)。但是,在执行此操作
日历.ReadWrite
和联系人.ReadWrite
客户端仅具有访问服务器API的权限:
用户尝试通过客户端应用程序应用程序id获取令牌,使用应允许访问整个服务器API的作用域(api:///.default
)。但是,在执行此操作时,用户在登录后不会看到“同意”屏幕,但会看到以下错误屏幕:
我不明白,因为所有超级权限都是由管理员预先授予的,对吗?我可以通过执行以下操作之一“修复”它,但在我看来没有什么是正确的:
- 将管理员许可授予客户端应用程序权限“用户\模拟”。同意屏幕不会显示,因为所有内容都已授予
- 对服务器应用程序的其余权限授予管理员许可(除了“脱机访问”似乎不需要管理员许可)。同意屏幕也不显示
- 完全删除需要管理员同意(*.All)的服务器应用权限。这一个甚至具有期望的效果,即为剩余的两个权限显示同意屏幕。但是服务器当然不能使用管理员权限
看起来管理员只授予部分权限不起作用,对吗?用户当然可以同意不需要管理员同意的权限,您可以在Azure门户中进行设置
- 以全局管理员身份登录Azure门户
- 选择Azure Active Directory>企业应用程序>同意和 权限>用户同意设置
添加:
/.default
范围通常用于v2.0端点,而/.default
范围可以用于任何OAuth 2.0流。但是,/.default
范围不是强制性的。它通常用于以下两种身份验证流:
/.default
范围,因为应用程序权限不涉及用户,因此管理员必须同意所有应用程序权限
/.default
预先授权所有权限
由于您当前正在使用委派权限,因此不需要使用
/。默认范围。是否希望用户同意不需要管理员同意的权限?是的,他们应该需要同意日历。ReadWrite
和联系人。ReadWrite
。当您将范围设置为/时。在请求令牌时,默认值将要求管理员同意所有权限。为什么不使用动态权限?例如:api://{server-app-id}/user\u模拟
或https://graph.microsoft.com/users.Read.All
。请注意,不要在范围中使用/。默认值。啊,这是一个很好的方法。我认为/.default
是最简单的,因为客户端不需要知道确切的权限(客户端不调用graph api,只是在稍后由服务应用程序调用),而是使用/.default
似乎必须授予所有权限,即使是管理员预先授予的权限。这一个非常明确地说:你能把它写进一个答案吗?那我就接受了。谢谢,不过已经安排好了。这是我在互联网上发现的一件事。但是如果设置不正确,即使我删除了管理员权限,它也不会工作,对吗?(参见OP中的最后一点)@Johanneseger你是说取消管理员的同意吗?不,如果我完全删除三个*.All权限,剩下的两个权限会显示同意屏幕-当然这不是一个选项,因为服务器以后需要这些权限。@johanneseger为什么要删除这三个*。所有权限?@johanneseger你能给我解释一下你的想法吗?如果您只希望普通用户同意非管理员权限,那么您可以参考我的答案。