用例 - 使用 DevOps 管道自动将 Microsoft Graphs 的 User.Read.All 权限分配给应用程序注册/服务主体。以便应用程序可以读取用户配置文件。 挑战 要授予 Microsoft Graphs 的 User.Read.All 权限,管道将在其下运行的服务主体需要全局管理员或特权角色管理员。 https://learn.microsoft.com/en-us/azure/active-directory/manage-apps/grant-admin-consent?pivots=portal。问题是,如果授予这些角色中的任何一个,服务主体可用于分配超过 Microsoft Graphs 的 User.Read.All 权限。我正在寻找一种方法,可以使用全局管理员或特权角色管理员或自定义角色来限制服务主体,以允许仅分配 User.Read.All 权限,以便服务主体不会被滥用。
权限
AppRoleAssignment.ReadWrite.All
将允许您的服务主体向其他主体授予权限和管理员同意,而无需分配全局管理员或特权角色管理员。请注意,此权限仅允许授予 application
类型权限,而不是 delegated
类型权限。
我下面的示例应用程序已获得管理员同意授予
AppRoleAssignment.ReadWrite.All
。我将使用此应用程序向其自身授予 User.Read.All
权限。
POST https://graph.microsoft.com/v1.0/servicePrincipals/9028d19c-26a9-4809-8e3f-20ff73e2d75e/appRoleAssignedTo
{
"principalId": "9028d19c-26a9-4809-8e3f-20ff73e2d75e",
"resourceId": "8fce32da-1246-437b-99cd-76d1d4677bd5",
"appRoleId": "df021288-bdef-4463-88db-98f22de89214"
}
PrincipalId
是我的示例应用程序的 Enterprise Application 的 object Id。此 ID 用于端点和请求正文中。
ResourceId
是 Microsoft Graph 的 企业应用程序 的 对象 Id(此 Id 对于每个租户都不同)
AppRoleId
是您的权限的 ID,可以在 Microsoft Graph 权限参考中找到
示例应用程序现在已分配
User.Read.All
权限并获得管理员同意。