我真的希望有人能够解释为什么在我们的情况下需要管理员同意,如果可能的话,我们如何避免它。以下是我们正常应用程序的简化版本,我能够在其中重现该问题。
我控制两个租户:T1,用于开发以及所有应用程序注册/资源所在的位置。还有租户 T2,我可以在其中控制所有用户设置,并用它来测试 Multi-Tenancy 。
在 T1 中,我注册了两个名为“app-frontend”和“app-api”的应用程序注册。 两者都具有 User.Read on Graph 所需的权限。此外,app-api 公开了一个(管理员和用户)范围,该范围被设置为应用程序前端所需的权限。 App-frontend 也在 app-api 上注册为已知客户端应用程序。
现在我们期望的行为是,当用户第一次请求应用程序前端的 token 时,他们会被请求同意并在接受后给予 token 。对于任何非管理员帐户,这会导致在使用 T2 的用户进行测试时出现“需要管理员批准”错误。当从 app-frontend 到 app-api 所需的权限被删除时,同意对于非管理员用户来说效果很好。
我在这里浏览了许多答案,试图找出为什么这里似乎需要管理员同意,但建议的答案/原因似乎都不适用于我们的案例。总结一下:
- T2 中的“用户可以注册应用程序”设置已启用。
- “用户可以同意应用代表他们访问公司数据”设置在 T2 中处于启用状态。
- 不需要进行用户分配(对于任一应用注册)。
- 这两个应用注册都不需要其他权限(因此不涉及应用程序权限)。
- 向 v1 和 v2 端点发出请求时都会出现此问题。
当应用程序前端的唯一权限是 User.Read 时,我希望其中的大多数也会导致需要管理员同意,但只有当存在对应用程序 API 范围的所需权限时,才会出现问题。
如果需要任何其他信息,我很乐意提供,我已经花了很长时间来解决这个问题。
更新: 两次注册时设置的应用程序权限的屏幕截图。
前端应用注册:Front end app registration
API应用注册:Api app registration
最佳答案
我没有重现您的问题,请参阅下面的步骤。
1.在租户A创建tonyFronEnd应用程序和tonyBackend应用程序,它们都是 Multi-Tenancy 应用程序。此外,tonyFronEnd 应用程序可以访问 tonyBackend 应用程序。并且 File.Read 不需要管理员同意。
2.使用tennatB的用户登录tonyFronEnd应用程序
https://login.microsoftonline.com/common/oauth2/v2.0/authorize?
client_id=90ffbdb4-5b89-4bbc-9f90-d42b2419294c
&response_type=code
&redirect_uri=https://localhost:8080
&response_mode=query
&scope=openid api://08b3e812-2141-47af-a00a-75de13d3916d/Files.Read
&state=12345
不需要管理员同意。
更新:(用户同意)
关于azure - 为什么我的应用程序注册设置需要管理员同意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61368997/