Azure active directory 如何使用/AdminApprove endpoint为一组用户而不是整个组织授予权限?

Azure active directory 如何使用/AdminApprove endpoint为一组用户而不是整个组织授予权限?,azure-active-directory,microsoft-graph-api,Azure Active Directory,Microsoft Graph Api,背景 我正在尝试开发一个多租户SaaS应用程序。 我正在尝试授权的管理员同意模型。但是,我无法确定作用域目标,即如何将自己限制在企业中的特定用户组,而不是所有用户 我相信并非所有企业都希望我们在一开始就处理所有用户 说明 我正在使用client\u凭证grant进行身份验证 该应用程序旨在读取用户的驱动器数据 我请求的权限集是: Files.Read.All Users.Read.All Sites.Read.All 当我请求全局管理员授予所需权限时,即重定向到 https://login.

背景

我正在尝试开发一个多租户SaaS应用程序。 我正在尝试授权的管理员同意模型。但是,我无法确定作用域目标,即如何将自己限制在企业中的特定用户组,而不是所有用户

我相信并非所有企业都希望我们在一开始就处理所有用户

说明

我正在使用
client\u凭证
grant进行身份验证

该应用程序旨在读取用户的驱动器数据

我请求的权限集是:

  • Files.Read.All
  • Users.Read.All
  • Sites.Read.All
当我请求全局管理员授予所需权限时,即重定向到
https://login.microsoftonline.com/common/adminconsent?client_id=[my_client_id]&state=12345&redirect_uri=[my_redirect_uri]

只要管理员同意该权限,该权限就适用于该租户下的所有用户。对于企业O365管理员来说,这是一种极不可接受的情况,因为他/她公开了整个用户/驱动器文件的详细信息

是否有一种方式可以让管理员代表特定的用户集/用户组进行同意


注意:仅允许管理员同意。我有一些使用安全组或创建服务帐户的建议。如果它们适用于我的用例,请给出一些提示。

这是不可能的,它也没有按照您认为的方式工作

为了澄清,管理员同意流程并不是代表“所有用户”同意,而是同意您的应用程序访问租户。使用客户端凭据时,上下文中没有用户。当管理员同意您的应用程序时,他们将授予租户范围(即管理员级别)对您范围内指定区域的访问权限(在这种情况下,可以读取任何用户、查看任何OneDrive和读取任何SharePoint站点)


如果要限制访问,则需要使用类似OAuth授权的授权代码,该代码接受特定用户的凭据。这将确保应用程序只能访问用户有权访问的内容

谢谢你的澄清。如果我没有错的话,我必须要求用户同意,对吗?我的用例是以用户组范围的方式访问组织文件数据。在没有用户干预的情况下,有什么方法可以这样做吗?没有,AAD v2端点将不允许您在未经同意的情况下代表用户操作。您需要至少获得一次。对于这样的场景,人们通常使用服务帐户(没有关联人员的用户帐户)。管理员使用这些凭据同意并获取初始访问令牌。之后,你的应用程序在需要获取新令牌时只需使用刷新令牌。谢谢@Marclafler,那么你的意思是,如果该组由1000人组成,管理员必须使用其服务帐户凭据同意1000次?若并没有,请您澄清一点:对于AAD v2端点,在同意重定向后,将为一个用户获取初始访问令牌。如何使用此服务帐户在开始时获得1000个访问令牌?不,1000个“人”中的一个将是服务帐户。每个
用户同意一次。如果您需要单独代表1000个用户进行操作,那么您需要对这1000个用户中的每一个进行身份验证。如何将其连接起来实际上取决于您希望执行的场景。如果希望代表单个用户执行,则需要对该用户进行身份验证。如果要代表组织执行,只需对客户端应用程序本身进行身份验证(“客户端凭据”)。