当应用程序注册中的应用程序对象发生更改时,如何更新从中提供的服务主体

When an application object in app registrations is changed, how to update the service principal that is provisioned from it

对于 Azure 多租户应用程序,当我们对应用程序对象进行任何更改时,更改只会反映在应用程序的主租户(应用程序注册的租户)中的服务主体对象中。其他租户中基于此应用程序对象提供的服务主体如何?有什么方法或建议来处理服务主体更新吗?

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

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

1#

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

2#

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

更新:

虽然servicePrincipal resource type or application resource type中没有代表更新时间或版本的属性,但我们有另一种方法可以查看AAD的审计日志。

在 Azure 门户 -> Azure Active Directory -> 审核日志中,select 类别的应用程序管理和 Activity 的更新服务主体。并且 Select 数据作为时间段(最多一个月)。然后就可以看到更新了哪些服务主体。

您还可以使用 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}')