Azure active directory 如何将委派的用户权限授予托管服务标识

Azure active directory 如何将委派的用户权限授予托管服务标识,azure-active-directory,azure-functions,microsoft-graph-api,azure-managed-identity,Azure Active Directory,Azure Functions,Microsoft Graph Api,Azure Managed Identity,TL;DR 当通常的交互方式(例如带有同意屏幕弹出窗口的web应用程序)不可行时,我如何将我的用户权限委托给Azure Ad中的服务负责人?这是因为我无法在Azure门户中正确配置MSI以使其以这种方式工作 更多细节 我想授予代表用户访问Graph API的应用程序权限。通常,这是一种场景,在该场景中,您创建应用注册,通过请求所需范围的权限来获取委派用户权限,然后在应用中使用这些权限 需要图形访问的应用程序是一种后台服务,可以在没有用户干预/活动的情况下自行运行。对于这个用例,常用的方法是使用应

TL;DR

当通常的
交互方式(例如带有同意屏幕弹出窗口的web应用程序)不可行时,我如何将我的用户权限委托给Azure Ad中的服务负责人?这是因为我无法在Azure门户中正确配置MSI以使其以这种方式工作

更多细节

我想授予代表用户访问Graph API的应用程序权限。通常,这是一种场景,在该场景中,您创建应用注册,通过请求所需范围的权限来获取委派用户权限,然后在应用中使用这些权限

需要图形访问的应用程序是一种后台服务,可以在没有用户干预/活动的情况下自行运行。对于这个用例,常用的方法是使用
应用程序权限
。在我的情况下,这是不可行的,因为应用程序权限需要管理员同意,并且是全部或全部权限。这是不可能给我的。这是理所当然的,因为这太过分了

但另一方面,这真的很遗憾。遗憾的是,我发现了一个关于如何将Graph API应用程序权限直接分配给
托管服务标识
,而不是分配给自注册应用程序的问题。我的服务(作为Azure功能应用程序)已经分配了MSI。因此,这将是完美的适合,b再次强调,我不可能获得这些应用程序权限

那么解决方法是什么呢?我们有一个
用户主体
,它拥有后台服务所需的所有权限。我要做的是将此用户的权限委托给函数App/MSI。为了做到这一点,我曾经有一些东西会提示我权限弹出窗口

但是,由于未启用
隐式oauth流
,此操作失败。要解决此问题,通常需要更新门户中的应用程序清单。但是,由于这是一个托管服务标识,而不是自注册的标识,因此MSI不会在门户中的“应用程序注册”下列出。因此,我无法将此属性设置为true

通过Azure CLI执行相同操作也失败,因为MSI显然未被标识为应用程序

az ad app update --oauth2-allow-implicit-flow true --id <appId_of_MSI>
az ad应用程序更新--oauth2允许隐式流为真--id
这会产生以下错误:

ResourceNotFoundError:资源“”不存在或其查询的引用属性对象之一不存在。

这样做时,它显示良好

az ad sp show --id <appId_of_MSI>
az广告sp show--id
总之,我无法以交互方式完成授权该用户权限的过程。还有别的办法吗?也许通过CLI

解决方案的后备方案是创建单独的非托管/自注册应用程序标识。但我真的想避免这种情况,因为这样我就需要再次管理和轮换客户端(应用程序)凭据,这是MSI为我处理的


为什么o为什么我不能在我的经验中分配精细范围的应用程序权限,托管身份不支持您建议的方案。 他们没有应用程序注册,因此无法交互验证用户

我会支持你的后备方案;一个普通的应用程序注册,并使用它代表用户访问Graph API。 这至少是我们在项目中所做的。
应用权限->托管标识(如果可能)。委托权限->普通应用程序注册+密钥库中的机密/证书,使用托管身份检索。

谢谢juunas。那么我确实有一个明确的行动计划去追求。您是否自动执行已注册应用的凭据轮换?到目前为止,它是手动轮换的:)