在 Azure 中授予管理员同意

Posted

技术标签:

【中文标题】在 Azure 中授予管理员同意【英文标题】:Grant Admin Consent in Azure 【发布时间】:2022-01-17 12:24:10 【问题描述】:

我们有一个客户端应用程序,它调用 Web API,而后者又调用 Microsoft Graph。 我在 Azure 门户中阅读了有关授予管理员许可的文档,但我仍然害怕按下该按钮,因为我不了解一些概念:

    在应用 A 的页面上授予管理员同意是否允许应用 A 访问其所有必需的范围,或允许其他应用访问在“公开 API”中定义的应用 A 范围? 我是否需要授予管理员对客户端应用程序和 Web API 的同意?或者我必须只为 Web API 授予它,并使客户端应用程序预授权? “授予管理员同意”是否允许应用程序自行调用 Microsoft Graph,绕过代表流程?例如,Web API 是否可以在不需要用户访问令牌的情况下调用 Microsoft Graph? 如果我们向 AD 添加新用户,是否需要再次按“授予管理员同意”? “应用注册”和“企业应用”页面上的“授予管理员同意”有什么区别吗?

【问题讨论】:

【参考方案1】:
    在应用程序 A 的页面上授予管理员同意允许应用程序 A 访问其所有必需的范围,或允许其他应用程序访问 访问应用程序 A 范围,在“公开 API”中定义?

管理员同意允许应用 A 在其 API 权限页面上使用所有委派和应用权限,不授予其他应用对应用 A 的权限。

    我是否需要授予管理员对客户端应用程序和 Web API 的同意?或者我必须只为 Web API 授予它,并制作客户端应用程序 预授权?

您最有可能应该授予两者。 根据第一个答案,授予客户同意不会给予例如MS Graph 访问 API 应用程序。 如果客户端是 API 应用程序的“已知客户端”(添​​加到清单中的 knownClientApplications 属性),则会提示用户同意。 这对于多层多租户应用很有用,但在您的场景中可能没有用。

    “授予管理员同意”是否允许应用程序自行调用 Microsoft Graph,绕过代表流程?例如,可以网络 API 调用 Microsoft Graph 无需用户访问令牌?

仅当您授予它应用程序权限时。 委派权限始终需要用户上下文来调用 API。

    如果我们向 AD 添加新用户,是否需要再次按“授予管理员同意”?

没有。 在委派权限的情况下,管理员同意会创建一个具有 null principalId 的 OAuth2PermissionGrant 对象。 这使其适用于当前和未来的所有用户。

    “应用注册”和“企业应用”页面上的“授予管理员同意”有什么区别吗?

我从未在企业应用程序页面中使用过,所以我不能确定。 但我猜这是同一回事。 权限始终授予服务主体(企业应用程序)而不是应用程序注册。 当您在应用注册中单击授予管理员同意时,它会在您的租户中修改其服务主体的实体。

【讨论】:

谢谢!是的,我之前使用过“knownClientApplications”来获得联合同意,但我们了解到我们想要删除不必要的同意页面。这样,Grant Admin Consent 就可以完美地为我们工作。再次感谢您的解释!

以上是关于在 Azure 中授予管理员同意的主要内容,如果未能解决你的问题,请参考以下文章

Azure 找出特定操作所需的权限

Azure SQL 数据库管理员权限

Azure DevOps - 部署组的权限问题

管理员帐户的 Azure AD SSO 登录问题

Azure API 管理 + Azure 函数和托管标识

Azure RBAC管理ASM资源