首页 > 解决方案 > 当应用程序注册中的应用程序对象发生更改时,如何更新从它提供的服务主体

问题描述

对于 Azure 多租户应用程序,当我们对应用程序对象进行任何更改时,这些更改仅反映在应用程序的主租户(应用程序注册的租户)中的服务主体对象中。其他租户中基于此应用程序对象配置的服务主体如何?是否有任何方法或建议来处理服务主体更新?

再次触发管理员同意流程将更新服务主体。但我有以下问题:

  1. 有没有办法检测需要更新的服务主体?从服务主体资源中,它不包含上次更新时间戳之类的内容。那么我们如何确定客户租户中的服务主体需要更新并通知其管理员呢?
  2. 似乎再次执行同意会更改服务主体的某些属性,例如权限,但不会更改其他一些属性,例如应用程序名称。对此是否有任何建议,例如删除现有的服务主体并再次执行管理员同意?

标签: azureazure-active-directorymulti-tenantazure-service-principal

解决方案


1#

恐怕没有办法检测到需要更新的服务主体。在主租户中更新应用注册后,您需要通知您的客户他们需要再次进行管理员同意。

2#

是的,您可以要求您的客户在其租户中删除服务主体(企业应用程序),然后尝试登录应用程序或再次征得管理员同意。这将更新您需要的属性。他们可以使用 PowerShell 或 Microsoft Graph 或在 Azure 门户中执行此操作。

更新:

尽管servicePrincipal 资源类型应用程序资源类型中没有表示更新时间或版本的属性,但我们还有另一种方法可以查看 AAD 的审核日志。

在 Azure 门户 -> Azure Active Directory -> 审核日志上,为类别选择 ApplicationManagement,为活动选择更新服务主体。并选择数据作为时间段(最多一个月)。然后您可以查看哪些服务主体已更新。

在此处输入图像描述

您还可以使用 Microsoft Graph API List directoryAudits来获取特定服务主体的更新日志。

一个例子:

GET https://graph.microsoft.com/v1.0/auditLogs/directoryaudits?$filter=activityDisplayName eq 'Update service principal' and targetResources/any(c:c/id eq '{service principal object id}')

推荐阅读